JavaScript 枚举 (Enum)

2025年4月21日 | 6分钟阅读

在 JavaScript 中,通过枚举来表示一组固定的命名值。它们使程序员能够创建一组命名常量,这些常量可以在代码库中重用,以提高错误预防、可读性和可维护性。

通常称为枚举(enums)的枚举用于 JavaScript 中表示一组固定的命名值。由于枚举不是 JavaScript 的内置功能,通常使用对象或冻结数组来实现它们。

此枚举可以包含星期几,如 {"星期日, 星期一, 星期二, 星期三, 星期四, 星期五, 和 星期六",} 颜色,如 {"蓝色, 红色, 黄色, 粉色, 绿色"} 等,季节,如 {"夏季, 秋季, 春季, 冬季"},以及方向,如 {"东, 西, 北, 南, 东北, 东南, 和 西南"}。

JavaScript 支持枚举吗?

尽管枚举(enum)数据类型常用于 C++、Java 等许多计算机语言中,但 JavaScript 缺乏内置的枚举数据类型。可以通过类和对象来实现在 JavaScript 中枚举的功能。

语法

让我们看一个例子,我们在 JavaScript 代码中使用了带有整数值的枚举类型。

输出

JavaScript Enum

小程序可以使用这种方法,尽管在某些情况下可能会导致歧义。开发人员可能会像这样编写指令,例如第一个字母小写,但字符串匹配会失败并返回 false。

输出

JavaScript Enum

由于它们只是基本类型的两个值,开发人员还可能设计不相关的枚举,这些枚举会错误地与条件运算符匹配。让我们用一个例子来检查这个问题。

输出

JavaScript Enum

在本例中,创建了两个不同的枚举类型,但它们在 if 块的值检查期间会混淆。我们想要的是别的。此外,使用整数或数字在逻辑上是错误的。例如,方向需要更有效地表示它们的种类,因为它们既不是字符串,也不是整数,也不是数字。

带有 Symbol 类型的枚举

JavaScript 中有一个称为 Symbol() 的概念。Symbol 不会相互冲突。因此,使用 Symbol 来指定值会更合适,出错的可能性也更小。下面的语法。

语法

让我们看一个使用 Symbol 的类似案例,并确定它们是否会冲突。

输出

JavaScript Enum

创建不可变的枚举类型

到目前为止,已经找到了一些枚举的实现。但是,存在一些问题。在最终策略中,我们还可以通过简单地为枚举类型分配一个新值来更新其值。通过使用 Object.freeze() 函数使对象不可变,可以限制枚举的更新。让我们以此为例。

语法

示例

输出

JavaScript Enum

总结

为了使我们的程序更易于阅读,我们可以使用通过枚举或 enum 数据类型创建的有序常量集合。与许多其他语言不同,JavaScript 不支持枚举类型。可以在 JavaScript 程序中使用多种方式设计枚举。可以通过带有整数值或字符串值的对象来创建基本枚举;但是,这种方法在许多情况下并不适用,因为同一类型的两个枚举可能会发生冲突。使用 Symbol 来防止冲突是一种可能的选择。使用类作为枚举类型是使枚举不可变的最合适的方式,这样我们可以防止不必要的修改。