一尘不染

如何保证我的枚举定义在 JavaScript 中不会改变?

javascript

以下是否会使对象满足枚举在 JavaScript 中的所有特征?就像是:

my.namespace.ColorEnum = {
  RED : 0,
  GREEN : 1,
  BLUE : 2
}

// later on

if(currentColor == my.namespace.ColorEnum.RED) {
  // whatever
}

还是有其他方法可以做到这一点?


阅读 119

收藏
2022-02-08

共1个答案

一尘不染

从 1.8.5 开始可以对对象进行密封和冻结,因此将上述定义为:

const DaysEnum = Object.freeze({"monday":1, "tuesday":2, "wednesday":3, ...})

或者

const DaysEnum = {"monday":1, "tuesday":2, "wednesday":3, ...}
Object.freeze(DaysEnum)

瞧!JS 枚举。

但是,这并不能阻止您将不需要的值分配给变量,这通常是枚举的主要目标:

let day = DaysEnum.tuesday
day = 298832342 // goes through without any errors

确保更高程度的类型安全(使用枚举或其他方式)的一种方法是使用TypeScript之类的工具。

不需要引号,但我保留它们以保持一致性。

2022-02-08