以下是否会使对象满足枚举在 JavaScript 中的所有特征?就像是:
my.namespace.ColorEnum = { RED : 0, GREEN : 1, BLUE : 2 } // later on if(currentColor == my.namespace.ColorEnum.RED) { // whatever }
还是有其他方法可以做到这一点?
从 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或Flow之类的工具。
不需要引号,但我保留它们以保持一致性。