我正在使用 jQuery,但在 IE7 中遇到了 $.inArray
的问题。
$.inArray([],'test')
在 IE7 中,它返回 0,但在 Chrome 中,它返回 -1,就像它应该的那样。
我已经在 jQuery 1.4.4 和 1.5.2 中对此进行了测试,结果是一样的。
为什么 $.inArray
在不同的浏览器中返回的不一样?
编辑:我只是把论点倒过来了,为什么我没有注意到呢? 但是,为什么 Chrome 给了 -1,而 IE7 给了 0?
最佳答案
你的参数倒过来了。要查找的元素应该首先出现,然后是数组。
这是代码(来自 1.5.0):
inArray: function( elem, array ) {
if ( array.indexOf ) {
return array.indexOf( elem );
}
for ( var i = 0, length = array.length; i < length; i++ ) {
if ( array[ i ] === elem ) {
return i;
}
}
return -1;
},
现在一个有趣的问题是,当您传入一个空数组作为目标时,为什么字符串“.indexOf()”在 IE7 中返回 0。有人可能知道,但我尽量不去担心为什么 IE7 的损坏部分会变成现在这样。
edit — 有趣的更新:事实证明,虽然上面的代码肯定存在于 jQuery 源代码中,但后来被重新定义了。上面的定义在 1.4.4 源代码的第 691 行,但稍后,在第 855 行,我们看到:
if ( indexOf ) {
jQuery.inArray = function( elem, array ) {
return indexOf.call( array, elem );
};
}
在那里,裸变量“indexOf”是对“Array.prototype.indexOf”的隐藏引用。当使用“.call()”调用时,第一个参数为字符串,第二个参数为空数组,返回 -1。
关于javascript - $.inArray 在 IE7 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5665382/