js 枚举实现
枚举的实现方式
在 JavaScript 中,枚举(Enum)可以通过多种方式实现,以下是几种常见的方法:
使用对象字面量
通过对象字面量可以模拟枚举的行为,键作为枚举的名称,值作为枚举的值。
const Color = {
RED: 'red',
GREEN: 'green',
BLUE: 'blue'
};
console.log(Color.RED); // 输出: 'red'
使用冻结对象
为了防止枚举值被修改,可以使用 Object.freeze 冻结对象。
const Status = Object.freeze({
PENDING: 'pending',
APPROVED: 'approved',
REJECTED: 'rejected'
});
Status.PENDING = 'new'; // 无效,严格模式下会报错
console.log(Status.PENDING); // 输出: 'pending'
使用类实现枚举
通过类可以封装枚举的逻辑,提供更丰富的功能。
class Direction {
static UP = new Direction('up');
static DOWN = new Direction('down');
static LEFT = new Direction('left');
static RIGHT = new Direction('right');
constructor(name) {
this.name = name;
}
}
console.log(Direction.UP.name); // 输出: 'up'
使用 Symbol 实现唯一值
使用 Symbol 可以确保枚举值的唯一性,避免命名冲突。
const LogLevel = {
DEBUG: Symbol('debug'),
INFO: Symbol('info'),
WARN: Symbol('warn'),
ERROR: Symbol('error')
};
console.log(LogLevel.DEBUG === Symbol('debug')); // 输出: false
TypeScript 中的枚举
如果使用 TypeScript,可以直接使用内置的 enum 语法。
enum Role {
Admin = 'admin',
User = 'user',
Guest = 'guest'
}
console.log(Role.Admin); // 输出: 'admin'
枚举的反向映射
在 TypeScript 的数字枚举中,支持通过值反向获取名称。
enum HttpStatus {
OK = 200,
NotFound = 404,
ServerError = 500
}
console.log(HttpStatus[200]); // 输出: 'OK'
使用常量枚举
TypeScript 还支持常量枚举(const enum),在编译时会被内联替换,减少运行时开销。

const enum Size {
Small = 'S',
Medium = 'M',
Large = 'L'
}
console.log(Size.Small); // 编译后直接替换为 'S'
以上方法可以根据具体需求选择适合的方式实现枚举功能。






