在JavaScript中4种创建枚举方式

138 阅读1分钟

在JavaScript中,由于没有内置的枚举类型,但可以使用不同的方式模拟创建枚举。以下是四种常见的创建枚举的方式:

  1. 对象字面量: 可以使用对象字面量创建一个包含枚举值的对象。每个枚举值都是对象的属性,其值可以是任何合法的JavaScript值。
const Colors = {
  RED: 'red',
  GREEN: 'green',
  BLUE: 'blue'
};

使用方式:

    console.log(Colors.RED); // 输出: "red"
  1. 构造函数: 可以使用构造函数创建一个枚举类,并定义枚举值作为类的实例属性。
    function Colors() {
      this.RED = 'red';
      this.GREEN = 'green';
      this.BLUE = 'blue';
    }

    const myColors = new Colors();

使用方式:

    javascriptCopy code
    console.log(myColors.RED); // 输出: "red"

3. Object.freeze()方法: 可以使用Object.freeze()方法将对象的属性设置为只读,从而创建一个不可变的枚举。

    const Colors = Object.freeze({
      RED: 'red',
      GREEN: 'green',
      BLUE: 'blue'
    });

使用方式:

    console.log(Colors.RED); // 输出: "red"

请注意,使用Object.freeze()只会冻结对象本身的属性,如果枚举值是对象,仍然可以修改对象的属性。

  1. Symbol类型: 可以使用Symbol类型创建唯一的枚举值。
    const Colors = {
      RED: Symbol('red'),
      GREEN: Symbol('green'),
      BLUE: Symbol('blue')
    };

使用方式:

    console.log(Colors.RED); // 输出: Symbol(red)

请注意,使用Symbol类型创建的枚举值是唯一的,不能通过相等性检查(如===)进行比较。应该使用其他方式(例如Object.is())进行比较。

  1. IIFE(立即调用函数表达式): 使用立即调用函数表达式创建一个函数作用域,在函数作用域内定义枚举成员。
var DaysOfWeek = (function() {
  var Monday = 1;
  var Tuesday = 2;
  var Wednesday = 3;
  var Thursday = 4;
  var Friday = 5;
  var Saturday = 6;
  var Sunday = 7;

  return {
    Monday: Monday,
    Tuesday: Tuesday,
    Wednesday: Wednesday,
    Thursday: Thursday,
    Friday: Friday,
    Saturday: Saturday,
    Sunday: Sunday
  };
})();

可以通过DaysOfWeek.Monday来访问枚举成员的值。