2010-03-08 114 views

回答

23

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

编辑:对于你可能想要的,David Dorward的下面的评论是非常有用的。如果你(有点反常)要坚持“在”,你可以使用对象文本

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

这应该允许1 in x && 2 in x && !(0 in 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

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

,因为在阵列中的第0元件。

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