js实现枚举
实现枚举的几种方法
JavaScript 本身没有内置的枚举类型,但可以通过多种方式模拟枚举行为。
使用对象常量
const Color = {
RED: 'RED',
GREEN: 'GREEN',
BLUE: 'BLUE'
};
function getColorName(color) {
switch(color) {
case Color.RED: return '红色';
case Color.GREEN: return '绿色';
case Color.BLUE: return '蓝色';
default: throw new Error('未知颜色');
}
}
使用冻结对象
防止枚举值被意外修改:

const Direction = Object.freeze({
UP: 'UP',
DOWN: 'DOWN',
LEFT: 'LEFT',
RIGHT: 'RIGHT'
});
使用类实现
更接近传统语言的枚举实现:

class Status {
static PENDING = new Status('PENDING');
static APPROVED = new Status('APPROVED');
static REJECTED = new Status('REJECTED');
constructor(name) {
this.name = name;
}
toString() {
return `Status.${this.name}`;
}
}
使用Symbol实现
确保枚举值唯一:
const LogLevel = {
DEBUG: Symbol('debug'),
INFO: Symbol('info'),
WARN: Symbol('warn'),
ERROR: Symbol('error')
};
TypeScript中的枚举
如果使用TypeScript,有原生枚举支持:
enum Response {
No = 0,
Yes = 1
}
function respond(recipient: string, message: Response): void {
// ...
}
枚举的最佳实践
- 使用大写字母命名枚举值,遵循常量命名惯例
- 考虑使用Object.freeze防止意外修改
- 为枚举添加文档说明每个值的含义
- 在需要唯一性时考虑使用Symbol
- 在大型项目中考虑使用TypeScript以获得更好的类型安全
枚举的常见用途
- 状态管理(如加载状态、表单状态)
- 配置选项(如主题、语言)
- 有限的选择集合(如用户角色、权限级别)
- 替代魔术字符串/数字,提高代码可读性






