2010-03-08 113 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