使用ES6在JavaScript中枚举

我正在用Javascript重建一个旧的Java项目,并意识到在JS中没有好的方法来枚举枚举。

我能想到的最好的是:

const Colors = {
    RED: Symbol("red"),
    BLUE: Symbol("blue"),
    GREEN: Symbol("green")
};
Object.freeze(Colors);

const保持Colors不被重新分配,冻结它可以防止变更键和值。 我使用的是Symbols,所以Colors.RED不等于0 ,或者除了它本身以外的其他东西。

这个配方有没有问题? 有没有更好的办法?


(我知道这个问题有点重复,但所有以前的Q / A都很旧,ES6给了我们一些新的功能。)


这个配方有没有问题?

我没有看到任何。

有没有更好的办法?

我将这两个陈述合并为一个:

const Colors = Object.freeze({
    RED:   Symbol("red"),
    BLUE:  Symbol("blue"),
    GREEN: Symbol("green")
});

如果你不喜欢样板,就像重复的Symbol调用一样,你当然也可以编写一个帮助函数makeEnum ,它可以从一个名称列表中创建相同的事物。


同时检查Enumify,这是一个非常好的功能强大的ES6枚举库。

希望这会有助于某人。

最好的祝福,

灵光


检查TypeScript如何执行它。 基本上他们做以下事情:

const MAP = {};

MAP[MAP[1] = 'A'] = 1;
MAP[MAP[2] = 'B'] = 2;

MAP['A'] // 1
MAP[1] // A

使用符号,冻结对象,无论你想要什么。

链接地址: http://www.djcxy.com/p/91759.html

上一篇: Enums in Javascript with ES6

下一篇: How to shorten switch case block converting a number to a month name?