JavaScript 中模拟枚举类型的实现方法

作者:异步漫步时间:2026-10-24 10:01:45浏览:356

JavaScript 原生不支持枚举类型,但可通过对象模拟实现。利用 Object.freeze 冻结对象可确保枚举值不可修改且不可重复,从而保证数据正确性并减少校验。本文介绍通过 IIFE 结合冻结技术模拟枚举的具体代码与原理。

前言

当前 JavaScript 语言标准中并未内置枚举类型。在某些业务场景下,使用枚举能够确保数据的准确性,并简化数据校验流程。本文将详细介绍如何在 JavaScript 中模拟实现枚举功能。

枚举主要特点

  • 枚举中的值必须保持唯一,不允许重复。
  • 枚举定义后,其值应当是不可变的,防止被意外修改。

实现


let days;
(function (days) {
    days[days["Sunday"] = 0] = "Sunday";
    days[days["Monday"] = 1] = "Monday";
    days[days["Tuesday"] = 2] = "Tuesday";
    days[days["Wednesday"] = 3] = "Wednesday";
    days[days["Thursday"] = 4] = "Thursday";
    days[days["Friday"] = 5] = "Friday";
    days[days["Saturday"] = 6] = "Saturday";
})(days || (days = {}));

此时,days 对象已初步具备枚举的访问特性,既可通过键名也可通过索引访问。然而,枚举的关键特性之一是“不可修改”,而普通的 days 对象仍允许随意更改属性。为此,可以使用 Object.freeze 函数对对象进行冻结,使其变为不可变对象,随后重新导出该对象。完整代码示例如下:


let days;
(function (days) {
    days[days["Monday"] = 1] = "Monday";
    days[days["Tuesday"] = 2] = "Tuesday";
    days[days["Wednesday"] = 3] = "Wednesday";
    days[days["Thursday"] = 4] = "Thursday";
    days[days["Friday"] = 5] = "Friday";
    days[days["Saturday"] = 6] = "Saturday";
    days[days["Sunday"] = 0] = "Sunday";
})(days || (days = {}));

//导出可枚举对象
export EnumWeek = Object.freeze(days)

以上即为在 JavaScript 中模拟实现枚举的完整步骤与代码。如需了解更多 JavaScript 相关技术内容,欢迎访问本站查阅其他文章。

作者最新文章