0在[1, 2]中等于真,为什么?

15

来自我的JavaScript控制台摘录:

> 0 in [1, 2]
true

为什么?

3个回答

23

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

编辑:如果您想要实现您可能打算的目的,David Dorward下面的评论非常有用。如果您(有点刻意地)想坚持使用“in”,可以使用对象字面量。

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

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


3
除此之外,Felix可能在寻找indexOf函数:https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Array/indexOf(需要JS 1.6,但该URI包含一个实现,您可以将其包含在代码中以供仍在使用1.5或更早版本的浏览器中)。 - Quentin

6

数组中有一个0号元素。

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

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;
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接