使用枚举改进 JavaScript

2025-06-10

使用枚举改进 JavaScript

枚举(Enums)是许多编程语言中常见的数据结构特性。虽然 JavaScript 原生没有此功能,但我们可以快速轻松地添加它们。

什么是枚举?

在我们深入代码并学习如何创建枚举之前,我们应该先讨论一下什么是枚举。我们先从数组开始。这个数组是 Web 应用中可能出现的错误类型的列表。

const errors = ['Data Error', 'Lunch Error', 'Mom Error'];
Enter fullscreen mode Exit fullscreen mode

虽然数组允许我们存储以后可以使用的错误类型列表,但它确实要求开发人员记住名称以及它们在数组中出现的顺序。

console.log( errors[0] );
//if you remember that zero refers to 'DataError'
//then you get the right value.
Enter fullscreen mode Exit fullscreen mode

枚举通过创建一个不可编辑的值列表来解决此问题,其中每个值都有一个字符串名称作为键。

因此,可以使用 JavaScript 对象更紧密地复制这一点。

const errors = {
  DATAERROR: 'Data Error',
  LUNCHERROR: 'Lunch Error',
  MOMERROR: 'Mom Error'
}
Enter fullscreen mode Exit fullscreen mode

使用对象,我们可以避免必须记住每个值的位置的问题。

console.log( errors['DATAERROR'] );
Enter fullscreen mode Exit fullscreen mode

我们仍然存在这样的问题:任何键或值都可以被编辑或删除。

因此,枚举是运行时无法更改的键值对列表。

创建 JavaScript 枚举

既然对象比数组更适合复制枚举,那么我们需要解决只读问题。这就引出了Object.freeze方法。

Object.freeze方法允许我们获取任何对象并更改每个属性的可配置和可写属性描述符,以便不能对键或值进行任何更改。

const errors = Object.freeze({
  DATAERROR: 'Data Error',
  LUNCHERROR: 'Lunch Error',
  MOMERROR: 'Mom Error'
});

console.log( errors['LUNCHERROR'] );
//we can use either square bracket syntax 
//or dot notation to access the values
console.log( errors.MOMERROR );
Enter fullscreen mode Exit fullscreen mode

使用const还将阻止任何新值被分配到errors原始对象并替换原始对象。

枚举的应用

作为我们如何使用枚举的一个例子,我们可以想象一个简单的 Web 应用程序,它尝试按顺序执行一些异步任务,当其中任何一个任务失败时,它将抛出特定于该任务的错误。

Promise.resolve(123)
  .then(async (id)=>{
    let url = `https://example.com/users/${id}`;
    let resp = await fetch(url)
    if(!resp.ok) throw new Error(errors['DATAERROR']);
    return 'burger';
  })
  .then(async (food) => {
    let isGood = await enjoyAsyncLunch(food);
    if(!isGood) throw new Error(errors['LUNCHERROR']);
    return true;
  })
  .then((ready) => {
    if( !askMomForPermission() ) throw new Error(errors.MOMERROR);
  })
  .catch((err)=> {
    console.error(`Reason for failure is ${err.message}`);
  });
Enter fullscreen mode Exit fullscreen mode

创建枚举对象的一个​​额外好处是,现在大多数 IDE(如 VSCode)都能够使用代码完成来显示错误的可能值。

鏂囩珷鏉ユ簮锛�https://dev.to/prof3ssorst3v3/improving-your-javascript-with-enums-5ck4
PREV
像专业人士一样开始使用 Git - 在团队中使用 Git 的实践课程 [免费]
NEXT
通过功能切换将部署与发布分离