答案有三:1. jQuery, $.inArray(x, arr); 2. 自製, in_array(x, arr); 3. arr.indexOf(x)
貼上代碼
$.inArray:
inArray: function( elem, arr, i ) {
var len;
if ( arr ) {
if ( indexOf ) {
return indexOf.call( arr, elem, i );
}
len = arr.length;
i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
for ( ; i < len; i++ ) {
// Skip accessing in sparse arrays
if ( i in arr && arr[ i ] === elem ) {
return i;
}
}
}
return -1;
},
自製 in_array:
function in_array(needle, haystack) {
var i = 0, n = haystack.length;
for (;i < n;++i)
if (haystack[i] === needle)
return true;
return false;
}
indexOf:
(arr.indexOf(x) !== -1)
總結
經測試,論多瀏覽器多數據類型的綜合性能,傳統的循環效率最高(前提是像我一樣,優化好代碼)
除 chrome 39 x64 ,純數字類型外,indexOf 的效率都不是最好的。
some + 匿名函數的效率實在太低了,不認直視,故不再考慮。
jQuery 因爲做了額外工作(從註釋看是爲了優化)反而降低了效率。