在JavaScript中定义枚举的首选语法是什么?
在JavaScript中定义枚举的首选语法是什么? 就像是:
my.namespace.ColorEnum = {
RED : 0,
GREEN : 1,
BLUE : 2
}
// later on
if(currentColor == my.namespace.ColorEnum.RED) {
// whatever
}
还是有更好的成语?
由于1.8.5可以密封和冻结物体,因此将上述定义为:
var DaysEnum = Object.freeze({"monday":1, "tuesday":2, "wednesday":3, ...})
要么
var DaysEnum = {"monday":1, "tuesday":2, "wednesday":3, ...}
Object.freeze(DaysEnum)
瞧! JS枚举。
资源
行情是不需要的,但我保持一致。
这不是一个很好的答案,但我可以说个人的工作很好
话虽如此,因为它的值并不重要(你已经使用了0,1,2),所以如果你想输出当前值,我会使用一个有意义的字符串。
更新 :感谢所有大家的赞扬,但我不认为我的答案在下面是用Javascript编写枚举的最佳方式。 查看我的博客文章以获取更多详细信息:使用Javascript枚举。
提醒名称已经可以了:
if (currentColor == my.namespace.ColorEnum.RED) {
// alert name of currentColor (RED: 0)
var col = my.namespace.ColorEnum;
for (var name in col) {
if (col[name] == col.RED)
alert(name);
}
}
或者,您可以制作值对象,以便您可以拥有蛋糕并将其吃掉:
var SIZE = {
SMALL : {value: 0, name: "Small", code: "S"},
MEDIUM: {value: 1, name: "Medium", code: "M"},
LARGE : {value: 2, name: "Large", code: "L"}
};
var currentSize = SIZE.MEDIUM;
if (currentSize == SIZE.MEDIUM) {
// this alerts: "1: Medium"
alert(currentSize.value + ": " + currentSize.name);
}
在Javascript中,因为它是一种动态语言,所以以后甚至可以将枚举值添加到集合中:
// Add EXTRALARGE size
SIZE.EXTRALARGE = {value: 3, name: "Extra Large", code: "XL"};
请记住,身份检查不需要枚举的字段(值,名称和代码),只是为了方便。 此外,size属性本身的名称不需要进行硬编码,但也可以动态设置。 所以假设你只知道新的枚举值的名字,你仍然可以毫无问题地添加它:
// Add 'Extra Large' size, only knowing it's name
var name = "Extra Large";
SIZE[name] = {value: -1, name: name, code: "?"};
当然,这意味着一些假设不能再被做出(例如,该值代表正确的大小顺序)。
请记住,在Javascript中,对象就像地图或散列表。 一组名称 - 值对。 您可以循环浏览它们或以其他方式操作它们,而不必事先了解它们。
例如:
for (var sz in SIZE) {
// sz will be the names of the objects in SIZE, so
// 'SMALL', 'MEDIUM', 'LARGE', 'EXTRALARGE'
var size = SIZE[sz]; // Get the object mapped to the name in sz
for (var prop in size) {
// Get all the properties of the size object, iterates over
// 'value', 'name' and 'code'. You can inspect everything this way.
}
}
顺便说一句,如果你对命名空间感兴趣,你可能想看看我的解决方案,为JavaScript提供简单而强大的命名空间和依赖管理:Packages JS
链接地址: http://www.djcxy.com/p/2667.html上一篇: What is the preferred syntax for defining enums in JavaScript?