我正在使用jQuery,我在IE7中遇到$.inArray
的问题。
$.inArray([],'test')
在IE7中,这会返回0,但在Chrome中,它会返回-1,就像它应该的那样。
我已经在jQuery 1.4.4和1.5.2中测试了它,它也是一样的。
为什么$.inArray
在不同的浏览器中不会返回相同内容?
编辑:我只是向后争论,为什么我没注意到? 但是,为什么Chrome会给-1,而IE7会给0?
答案 0 :(得分:2)
你有倒退的参数。要查找的元素应首先出现,然后是数组。
这是代码(来自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的破碎部分就像它们一样。
编辑 - 有趣的更新:事实证明,尽管上面的代码肯定存在于jQuery源代码中,但它后来被重新定义。上面的定义是在1.4.4源代码中的第691行,但后来在第855行,我们看到:
if ( indexOf ) {
jQuery.inArray = function( elem, array ) {
return indexOf.call( array, elem );
};
}
在那里,裸变量“indexOf”是对“Array.prototype.indexOf”的存储引用。当用“.call()”调用它时,第一个参数为字符串而第二个为空数组,则返回-1。