2012-01-16 12 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] 

私は常にfalseを取得(私はアイテムが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

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'); 
}