ES6中的Javascript中的枚举
- 论坛
- ES6中的Javascript中的枚举
22 浏览
ES6中的Javascript中的枚举
我正在用Javascript重建一个旧的Java项目,并意识到在JS中没有很好的方法来实现枚举。
我能想到的最好的方法是:
const Colors = { RED: Symbol("red"), BLUE: Symbol("blue"), GREEN: Symbol("green") }; Object.freeze(Colors);
const
关键字防止对Colors
的重新赋值,而冻结它则防止对键和值进行修改。我使用Symbol来确保Colors.RED
不等于0
,也不等于除了自己以外的其他任何值。
这种方法有什么问题吗?有更好的方法吗?
(我知道这个问题有点重复了,但是所有以前的问答都相当旧了,而且ES6给我们带来了一些新的功能。)
编辑:
另一种解决方案,解决了序列化问题,但我认为仍然存在领域问题:
const enumValue = (name) => Object.freeze({toString: () => name}); const Colors = Object.freeze({ RED: enumValue("Colors.RED"), BLUE: enumValue("Colors.BLUE"), GREEN: enumValue("Colors.GREEN") });
通过使用对象引用作为值,您可以获得与Symbols相同的避免冲突的效果。