2012-01-16 47 views
0

我已經使用以下語法內置在JavaScript的「枚舉」:測試對於在JavaScript關聯數組枚舉值的存在

MyEnum = { 
    MY_VAL_1 : { name: "Value 1" }, 
    MY_VAL_2 : { name: "Value 2" }, 
    MY_VAL_3 : { name: "Value 3" } 
}; 

欲存儲包含這些枚舉值0以上字典和我希望能夠測試字典中是否存在任何特定的值。我還希望顯示下拉列表中不在字典中的值以及另一個下拉列表中字典中的值,並且具有允許用戶使用這些下拉列表向字典中添加或從字典中刪除值的按鈕。

我可以得到下拉菜單,但我無法在「for(x in MyEnum)」塊之外的字典中測試是否存在。如果我使用:

list[MyEnum.MY_VAL_1] 

我總是得到錯誤(我猜是因爲項目存儲沒有MyEnum命名空間?)。如果我嘗試:

list[MY_VAL_1] 

我剛剛得到一個Uncaught ReferenceError。

我如何得到這個工作,或者有更好的方法來做到這一點?

這裏是我到目前爲止已經做了的jsfiddle:http://jsfiddle.net/jKfbh/3/

回答

3

MyEnum.MY_VAL_1返回您指定的對象,{ name: "Value 1" }

要測試一個值是否在你的「名單」(這,其實是一個對象或字典),您應使用此代碼:

if (list["MY_VAL_1"]) { 
    alert('val 1 is in list'); 
} 
+0

謝謝,我知道這會很簡單。我編輯了這個問題,爲集合使用了正確的術語。 – Bonnici 2012-01-16 08:25:04

1
var MyEnum = { 
MY_VAL_1 : { name: "Value 1" }, 
MY_VAL_2 : { name: "Value 2" }, 
MY_VAL_3 : { name: "Value 3" } 
}; 
alert("MY_VAL_1" in MyEnum); 

JavaScript沒有枚舉。在ES5中,你可以將屬性定義爲密封凍結等,這會使它們的表現與枚舉類似,但是,誠實地說,如果你發現自己需要JavaScript中的這樣一個特性,你可能需要重新考慮你的設計。這並不意味着你的設計一定是壞的,而是JavaScript幾乎不提供任何你想要的東西。

1

您可以檢查該值是這樣的:

if(MyEnum['MY_VAL_1']){ 
    alert('val 1 in the list'); 
}