jQuery的inArray()方法在一个数组中查找匹配元素。
jQuery的inArray()源码如下:
core_deletedIds = [],
core_indexOf = core_deletedIds.indexOf, // 相当于 core_indexOf = Array.indexOf;
inArray: function(elem, arr, i) { // elem规定需检索的值,arr规定检索的数组,i可选,规定在数组中开始检索的位置,它的合法取值是0到arr.length-1,如省略该参数,则将从数组首元素开始检索。
var len;
if (arr) { // 原生的Array对象支持indexOf方法,直接调用
if (core_indexOf)
return core_indexOf.call(arr, elem, i);
}
len = arr.length;
i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; // 当i为负数时,从数组后边len+i的位置开始索引;当i不存在时,从数组首元素开始检索
for (; i < len; i++) {
// (i in arr)判断是为了跳过稀疏数组中的元素
// 如 var arr = []; arr[2] = 1;
// 此时 arr == [undefined, undefined, 1]
// 0 in arr == false
// 1 in arr == false
// 2 in arr == true
// 但是,$.inArray(undefined, arr, 0)返回-1
if (i in arr && arr[i] === elem)
return i;
}
return -1;
},
若:
var arr = [undefined, 1];
则:
arr == [undefined, 1]
0 in arr == true;
arr.indexOf(undefined) == 0;
arr[0] == undefined;
若:
var arr = []; a[1] = 1;
则:
arr == [undefined, 1]
0 in arr == false;
arr.indexOf(undefined) == -1;
arr[0] == undefined;