我想在javascript中创建枚举,我做了以下代码,我想验证这是正确的方法。
var dataStates = {
withMock: "withM",
withoutMock: "withoutM",
};
没关系?
我希望例如像
一样使用它oCation.dataMode === dataStates.withMock
并且state.data.withMock将保留该值,但我不确定它是否正确...
答案 0 :(得分:1)
您创建的是具有命名属性的对象。这不是Java意义上的Enum。也就是说,没有语言约束强制执行唯一性和单个实例。但是,您所做的将满足您在问题中指定的要求。
答案 1 :(得分:1)
Javascript没有正确的(静态)enum
类型,但是你可以使用Typescript为其枚举生成的相同代码来实现非常接近的东西。
要提供枚举但仍然是有效的JS,你需要一个对象,其中每个枚举元素(名称)是一个键,映射到一个唯一的值(通常是一个int,因为大多数带有枚举的语言用整数值来支持它们)。 / p>
对于类似enum Color {Red, Green, Blue};
的枚举,您最终会得到包含以下内容的代码:
Color[Color["Red"] = 0] = "Red";
Color[Color["Green"] = 1] = "Green";
Color[Color["Blue"] = 2] = "Blue";
这将创建一个对象,其中包含每个枚举元素名称的键,以及每个元素的值。最终的对象如下:
var Color;
(function(Color) {
Color[Color["Red"] = 0] = "Red";
Color[Color["Green"] = 1] = "Green";
Color[Color["Blue"] = 2] = "Blue";
})(Color || (Color = {}));
document.getElementById("result").textContent = JSON.stringify(Color);
<pre id="result"></pre>
这允许您使用传统的Color.Red
语法访问枚举值,但也允许您使用Color[Color.Red]
(或包含其中一个枚举值的变量)将值映射回名称。 / p>
例如:
var Color;
(function(Color) {
Color[Color["Red"] = 0] = "Red";
Color[Color["Green"] = 1] = "Green";
Color[Color["Blue"] = 2] = "Blue";
})(Color || (Color = {}));
document.getElementById("red").textContent = Color.Red; // Should print "0"
var currentColor = Color.Green;
document.getElementById("green").textContent = Color[currentColor]; // Should print "Green"
currentColor = Color.Blue;
document.getElementById("blue").textContent = Color[currentColor]; // Should now print "Blue"
<pre id="red"></pre>
<pre id="green"></pre>
<pre id="blue"></pre>