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.

Wikipedia: Aufzählungsart

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 ()

5.1

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

5.1

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;
}


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow