2011-03-10 100 views
0

我想創建C類型枚舉,值自動從0開始。
以下代碼有什麼問題?在JavaScript中自動枚舉

function ArrayToEnum(arr) 
{ 
    var len = arr.lenght; 
    en = {}; 
    for(i=0;i<len;i++) 
     en[arr[i]]=i; 
    return en; 
} 

a=['foo','bar']; 
b=ArrayToEnum(arr); 
console.debug(b.foo); 

> Undefined 

我希望它打印0,而是(至少在鉻9.0),這是不確定的。如果不是調用函數,我直接套用體,它的工作原理:

var l=a.length; 
for(i=0;i<l;i++) b[a[i]]=i; 
console.debug(b.foo); 

> 0 

什麼是錯的功能?

+2

您在代碼的第三行拼寫錯誤'length'。您的實際代碼中是否存在該錯誤?另外 - 這是什麼意思? – 2011-03-10 21:22:27

回答

3

如果這是你的實際代碼,「長度」的拼寫錯誤作爲三線「lenght」:

var len = arr.lenght; 

我期望編譯,但它會設置len等於undefined,這將阻止你的循環體執行。這會導致arr.foo又名。arr["foo"]undefined,正如您在輸出中看到的那樣。

另外,當您將上一行中的數組稱爲a而不是arr時,您還將"arr"傳遞至ArrayToEnum()

這裏的常見主題是,當你開始談論你尚未定義的變量時。 JavaScript「有用地」定義它,而不是告訴你它還不存在。

我在Chrome的JS控制檯上試了一下,我得到了「引用錯誤」,直到我修復了「a」/「arr」問題。一旦這個問題得到解決,我就會得到「未定義」的描述。

當我固定「lenght」,賓果,它打印「0」。

+0

「a」/「arr」是複製/粘貼錯誤,它在源代碼中是正確的,但該死的我拼錯了長度。謝謝。 – 2011-03-10 21:29:00