今天被jquery
中的inArray
方法折腾好久,基础不牢,特意查了一些相关知识记录在这里。我要先去洗澡了,等我有时间了我再完善这篇文章。
jQuery JavaScript Library v1.10.2的inArray源码:
inArray: function( elem, arr, i ) { var len; if ( arr ) { if ( core_indexOf ) { return core_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; },
jquery首先调用的也是es5的indexOf方法,然后再去遍历数组,你看到jquery使用的是===,这就是我的踩坑点,而es5默认使用的也是strict equality。
我们知道zepto实现了和jquery类似的API,看看zepto v1.0的inArray源码:
$.inArray = function(elem, array, i){ return emptyArray.indexOf.call(array, elem, i) }
这个实现挺简单的,直接使用了es5的数组的indexOf方法。
参考链接
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf