[1,2]中的0 = = true,为什么?

时间:2010-03-08 13:45:17

标签: javascript

摘自我的JavaScript控制台:

> 0 in [1, 2]
true

为什么?

3 个答案:

答案 0 :(得分:23)

因为如果指定的属性/索引在对象中可用,则“in”返回true。 [1,2]是一个数组,并且在0索引处有一个对象。因此,[1,2]中的0和[1,2]中的1。但是!([1,2]中的2)。

编辑:对于你的意图,David Dorward在下面的评论非常有用。如果你(有点反过来)想要坚持'in',你可以使用对象文字

x = {1: true, 2: true};

这应该允许1 in x && 2 in x && !(0 in x)等。但实际上,只需使用indexOf。

答案 1 :(得分:6)

因为数组中有0个元素。

> 0 in [8,9]
true
> 1 in [8,9]
true
> 8 in [8,9]
false

答案 2 :(得分:2)

您可能正在寻找[1,2].indexOf(0)indexOf可能在ie6中不起作用。

以下是修复它的一个实现:

if(!Array.indexOf) {
   Array.prototype.indexOf = function(obj) {
      for(var i=0; i<this.length; i++) {
         if (this[i]==obj) {
            return i;
         }
       }
       return -1;
    }
}