ES6中的Javascript中的枚举

22 浏览
0 Comments

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相同的避免冲突的效果。

0