当前位置:首页 > JavaScript

js enum 实现

2026-03-15 01:36:32JavaScript

在 JavaScript 中,原生并不直接支持枚举(enum),但可以通过多种方式模拟枚举的功能。以下是几种常见的实现方法:

使用对象模拟枚举

通过对象字面量定义键值对,实现枚举效果。这种方式简单直观,适合大多数场景。

js enum 实现

const Color = {
  RED: 'red',
  GREEN: 'green',
  BLUE: 'blue'
};

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

使用冻结对象防止修改

通过 Object.freeze() 防止枚举值被意外修改,增强代码的健壮性。

const Direction = Object.freeze({
  UP: 'up',
  DOWN: 'down',
  LEFT: 'left',
  RIGHT: 'right'
});

Direction.UP = 'newValue'; // 静默失败(严格模式下报错)
console.log(Direction.UP); // 输出: up

使用类实现枚举

通过类的静态属性和私有特性(ES2022+)实现更复杂的枚举逻辑,例如添加方法或校验。

js enum 实现

class Status {
  static PENDING = new Status('pending');
  static APPROVED = new Status('approved');
  static REJECTED = new Status('rejected');

  constructor(value) {
    this.value = value;
  }

  toString() {
    return this.value;
  }
}

console.log(Status.PENDING.toString()); // 输出: pending

使用 TypeScript 的枚举语法

如果项目使用 TypeScript,可以直接使用原生 enum 语法,编译后会生成对应的 JavaScript 代码。

enum LogLevel {
  ERROR = 1,
  WARN = 2,
  INFO = 3,
  DEBUG = 4
}

console.log(LogLevel.ERROR); // 输出: 1

使用 Symbol 实现唯一值

通过 Symbol 确保枚举值的唯一性,避免与其他值冲突。

const LogLevel = {
  DEBUG: Symbol('debug'),
  INFO: Symbol('info'),
  WARN: Symbol('warn'),
  ERROR: Symbol('error')
};

console.log(LogLevel.DEBUG === Symbol('debug')); // 输出: false

注意事项

  • 如果需要反向映射(通过值获取键),可以手动实现或使用 TypeScript 的数值枚举。
  • 冻结对象或使用 Symbol 可以避免枚举值被修改,但可能增加代码复杂度。
  • 在 TypeScript 中优先使用原生 enum,以获得类型检查和更好的工具支持。

标签: jsenum
分享给朋友:

相关文章

js 实现vue

js 实现vue

实现 Vue 的核心功能 在 JavaScript 中实现 Vue 的核心功能需要模拟数据绑定、虚拟 DOM 和响应式系统。以下是一个简化版的实现思路: 响应式系统 通过 Object.define…

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽功能。以下是核心代码逻辑: const draggableElement = document.…

原生js实现轮播图

原生js实现轮播图

基本结构搭建 HTML部分需要包含轮播图容器、图片列表及导航按钮。结构示例如下: <div class="slider-container"> <div class="slid…

js轮播图实现原理

js轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…