Suche…
Bemerkungen
Bei der Computerprogrammierung ist ein Aufzählungstyp (auch Aufzählung oder Aufzählung [..]) ein Datentyp, der aus einer Menge benannter Werte besteht, die als Elemente, Member oder Enumeratoren des Typs bezeichnet werden. Die Aufzählernamen sind normalerweise Bezeichner, die sich als Konstanten in der Sprache verhalten. Einer Variablen, für die ein Aufzählungstyp deklariert wurde, kann ein beliebiger Enumerator als Wert zugewiesen werden.
JavaScript ist schwach typisiert, Variablen wurden zuvor nicht mit einem Typ deklariert und es gibt keinen nativen enum
. Hier angeführte Beispiele können verschiedene Möglichkeiten zum Simulieren von Enumeratoren, Alternativen und möglichen Kompromissen enthalten.
Aufzählungsdefinition mit Object.freeze ()
JavaScript unterstützt Enumeratoren nicht direkt, die Funktionalität einer Enumeration kann jedoch imitiert werden.
// Prevent the enum from being changed
const TestEnum = Object.freeze({
One:1,
Two:2,
Three:3
});
// Define a variable with a value from the enum
var x = TestEnum.Two;
// Prints a value according to the variable's enum value
switch(x) {
case TestEnum.One:
console.log("111");
break;
case TestEnum.Two:
console.log("222");
}
Die obige Aufzählungsdefinition kann auch wie folgt geschrieben werden:
var TestEnum = { One: 1, Two: 2, Three: 3 }
Object.freeze(TestEnum);
Danach können Sie eine Variable definieren und wie zuvor drucken.
Alternative Definition
Die Object.freeze()
-Methode ist seit Version 5.1 verfügbar. Für ältere Versionen können Sie folgenden Code verwenden (beachten Sie, dass er auch in Version 5.1 und höher funktioniert):
var ColorsEnum = {
WHITE: 0,
GRAY: 1,
BLACK: 2
}
// Define a variable with a value from the enum
var currentColor = ColorsEnum.GRAY;
Eine Aufzählungsvariable drucken
Nachdem Sie eine Aufzählung mit einer der oben genannten Methoden definiert und eine Variable festgelegt haben, können Sie sowohl den Wert der Variablen als auch den entsprechenden Namen aus der Aufzählung für den Wert drucken. Hier ist ein Beispiel:
// Define the enum
var ColorsEnum = { WHITE: 0, GRAY: 1, BLACK: 2 }
Object.freeze(ColorsEnum);
// Define the variable and assign a value
var color = ColorsEnum.BLACK;
if(color == ColorsEnum.BLACK) {
console.log(color); // This will print "2"
var ce = ColorsEnum;
for (var name in ce) {
if (ce[name] == ce.BLACK)
console.log(name); // This will print "BLACK"
}
}
Implementieren von Enums mithilfe von Symbolen
Mit ES6 wurden Symbole eingeführt, bei denen es sich sowohl um eindeutige als auch um unveränderliche Grundwerte handelt, die als Schlüssel einer Object
Eigenschaft verwendet werden können. Anstatt Strings als mögliche Werte für eine Aufzählung zu verwenden, können Symbole verwendet werden.
// Simple symbol
const newSymbol = Symbol();
typeof newSymbol === 'symbol' // true
// A symbol with a label
const anotherSymbol = Symbol("label");
// Each symbol is unique
const yetAnotherSymbol = Symbol("label");
yetAnotherSymbol === anotherSymbol; // false
const Regnum_Animale = Symbol();
const Regnum_Vegetabile = Symbol();
const Regnum_Lapideum = Symbol();
function describe(kingdom) {
switch(kingdom) {
case Regnum_Animale:
return "Animal kingdom";
case Regnum_Vegetabile:
return "Vegetable kingdom";
case Regnum_Lapideum:
return "Mineral kingdom";
}
}
describe(Regnum_Vegetabile);
// Vegetable kingdom
Der Artikel " Symbole in ECMAScript 6 " behandelt diesen neuen primitiven Typ ausführlicher.
Automatischer Aufzählungswert
In diesem Beispiel wird veranschaulicht, wie jedem Eintrag in einer Listenliste automatisch ein Wert zugewiesen wird. Dadurch wird verhindert, dass zwei Aufzählungen versehentlich denselben Wert haben. HINWEIS : Browser für Object.freeze-Browser
var testEnum = function() {
// Initializes the enumerations
var enumList = [
"One",
"Two",
"Three"
];
enumObj = {};
enumList.forEach((item, index)=>enumObj[item] = index + 1);
// Do not allow the object to be changed
Object.freeze(enumObj);
return enumObj;
}();
console.log(testEnum.One); // 1 will be logged
var x = testEnum.Two;
switch(x) {
case testEnum.One:
console.log("111");
break;
case testEnum.Two:
console.log("222"); // 222 will be logged
break;
}