js实现枚举
枚举的概念
在JavaScript中,枚举(Enum)是一种常见的数据结构,用于定义一组命名的常量值。虽然JavaScript原生不直接支持枚举,但可以通过对象或类模拟实现。
使用对象模拟枚举
通过冻结对象防止属性被修改,确保枚举值的不可变性。
const Color = Object.freeze({
RED: 'red',
GREEN: 'green',
BLUE: 'blue'
});
console.log(Color.RED); // 输出: red
使用类模拟枚举
通过静态属性和私有构造函数实现更严格的枚举模式。
class Status {
static PENDING = new Status('pending');
static APPROVED = new Status('approved');
static REJECTED = new Status('rejected');
constructor(name) {
this.name = name;
}
}
console.log(Status.PENDING.name); // 输出: pending
使用TypeScript的枚举语法
如果项目基于TypeScript,可直接使用内置的枚举语法,编译后会转换为JavaScript代码。
enum Direction {
Up = 'UP',
Down = 'DOWN',
Left = 'LEFT',
Right = 'RIGHT'
}
console.log(Direction.Up); // 输出: UP
枚举的反向映射
TypeScript的数字枚举支持通过值反向获取键名,但字符串枚举不支持此特性。
enum NumericEnum {
A = 1,
B = 2
}
console.log(NumericEnum[NumericEnum.A]); // 输出: "A"
实际应用场景
枚举常用于状态管理、配置选项或消除魔法字符串,提升代码可读性和维护性。例如,在Redux中定义Action类型时使用枚举。

const ActionTypes = Object.freeze({
ADD_TODO: 'ADD_TODO',
DELETE_TODO: 'DELETE_TODO'
});






