IE7中的$ .inArray

时间:2011-04-14 15:10:35

标签: javascript jquery internet-explorer internet-explorer-7

我正在使用jQuery,我在IE7中遇到$.inArray的问题。

$.inArray([],'test')

在IE7中,这会返回0,但在Chrome中,它会返回-1,就像它应该的那样。

我已经在jQuery 1.4.4和1.5.2中测试了它,它也是一样的。

为什么$.inArray在不同的浏览器中不会返回相同内容?

编辑:我只是向后争论,为什么我没注意到? 但是,为什么Chrome会给-1,而IE7会给0?

1 个答案:

答案 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。