测试JavaScript关联数组中是否存在枚举值
Testing for existence of enumeration value in a JavaScript associative array
我使用以下语法在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]
我刚得到一个未捕获的ReferenceError。
我该如何做到这一点,或者有更好的方法吗?
以下是我迄今为止所做的工作:http://jsfiddle.net/jKfbh/3/
MyEnum.MY_VAL_1
返回您指定的对象{ name: "Value 1" }
。
要测试一个值是否在您的"列表"中(事实上,它是一个对象或字典),您应该使用以下代码:
if (list["MY_VAL_1"]) {
alert('val 1 is in list');
}
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几乎没有提供任何工具来做你想做的事情。
您可以检查如下值:
if(MyEnum['MY_VAL_1']){
alert('val 1 in the list');
}
相关文章:
- 如何发送分配列表<字符串>到JavaScript数组或可枚举对象
- 枚举附加到文档的HTML对象的所有事件
- JavaScript数组的子类化破坏了快速枚举
- 为什么Javascript程序员更喜欢在代码中重复字符串作为常量,而不是使用枚举类型的对象
- 不可枚举的属性出现在 for..在 Chrome 中循环
- json模式v4如何根据枚举实现枚举
- 如何访问从 jstl foreach 到 jQuery 的枚举值
- 如何从 Javascript 访问 Java 枚举 (Java 1.8)
- JSON.stringify未序列化可枚举属性
- 为什么ES6 WeakMap's不可枚举
- 如何在另一个对象中枚举一个对象
- Javascript propertyIsNumerable-是否有可枚举的方法
- Javascript不可枚举属性
- TypeScript 中的枚举:JavaScript 代码在做什么
- 使用枚举作为类型/接口
- sails.js:枚举的模型定义 - 动态值列表
- 断言对象上存在可枚举属性
- 枚举窗口对象时不存在转义函数
- 测试JavaScript关联数组中是否存在枚举值
- 是否存在包含所有MouseEvent-Types的枚举