Odbudowuję stary projekt Java w Javascript i zdałem sobie sprawę, że nie ma dobrego sposobu na wykonanie wyliczeń w JS.
Najlepsze, co mogę wymyślić, to:
const Colors = {
RED: Symbol("red"),
BLUE: Symbol("blue"),
GREEN: Symbol("green")
};
Object.freeze(Colors);
const
Utrzymuje Colors
przed przeniesiony i zamrażania zapobiega mutacji klucze i wartości. Używam symboli, więc Colors.RED
to nie jest równe 0
ani nic poza sobą.
Czy jest jakiś problem z tym preparatem? Czy jest lepszy sposób?
(Wiem, że to pytanie jest trochę powtórzone, ale wszystkie poprzednie pytania i odpowiedzi są dość stare, a ES6 daje nam nowe możliwości.)
EDYTOWAĆ:
Inne rozwiązanie, które rozwiązuje problem serializacji, ale moim zdaniem nadal ma problemy z dziedziną:
const enumValue = (name) => Object.freeze({toString: () => name});
const Colors = Object.freeze({
RED: enumValue("Colors.RED"),
BLUE: enumValue("Colors.BLUE"),
GREEN: enumValue("Colors.GREEN")
});
Używając odniesień do obiektów jako wartości, uzyskuje się takie samo unikanie kolizji, jak w przypadku symboli.
JSON.stringify()
. Nie można serializować / deserializować Symbol
.