Ich habe ein altes Java-Projekt in Javascript neu erstellt und festgestellt, dass es in JS keine gute Möglichkeit gibt, Aufzählungen durchzuführen.
Das Beste, was ich mir einfallen lassen kann, ist:
const Colors = {
RED: Symbol("red"),
BLUE: Symbol("blue"),
GREEN: Symbol("green")
};
Object.freeze(Colors);
Das const
hält Colors
von neu zugewiesen wird, und das Einfrieren es verhindert , dass die Schlüssel und Werte mutiert. Ich benutze Symbole, damit das Colors.RED
nicht gleich ist 0
, oder irgendetwas anderes außer sich selbst.
Gibt es ein Problem mit dieser Formulierung? Gibt es einen besseren Weg?
(Ich weiß, dass diese Frage ein bisschen wiederholt wird, aber alle vorherigen Fragen und Antworten sind ziemlich alt, und ES6 bietet uns einige neue Funktionen.)
BEARBEITEN:
Eine andere Lösung, die sich mit dem Serialisierungsproblem befasst, aber meiner Meinung nach immer noch Probleme mit dem Bereich hat:
const enumValue = (name) => Object.freeze({toString: () => name});
const Colors = Object.freeze({
RED: enumValue("Colors.RED"),
BLUE: enumValue("Colors.BLUE"),
GREEN: enumValue("Colors.GREEN")
});
Durch die Verwendung von Objektreferenzen als Werte erhalten Sie die gleiche Kollisionsvermeidung wie bei Symbolen.
JSON.stringify()
. Kann nicht serialisieren / deserialisieren Symbol
.