摘自我的JavaScript控制台:
> 0 in [1, 2]
true
为什么?
答案 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;
}
}