来自我的JavaScript控制台摘录:
> 0 in [1, 2]
true
为什么?
"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。
数组中有一个0
号元素。
> 0 in [8,9]
true
> 1 in [8,9]
true
> 8 in [8,9]
false
[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;
}
}
indexOf
函数:https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Array/indexOf(需要JS 1.6,但该URI包含一个实现,您可以将其包含在代码中以供仍在使用1.5或更早版本的浏览器中)。 - Quentin