Zoeken…


Opmerkingen

In computerprogrammering is een opgesomd type (ook opsommingsteken of opsomming [..]) een gegevenstype dat bestaat uit een reeks benoemde waarden die elementen, leden of opsommers van het type worden genoemd. De namen van de teller zijn meestal identifiers die zich als constanten in de taal gedragen. Aan een variabele waarvan is aangegeven dat deze een genummerd type heeft, kan elk van de opsommers worden toegewezen als een waarde.

Wikipedia: Genummerd type

JavaScript is zwak getypt, variabelen zijn niet gedeclareerd met een soort van tevoren en het hoeft niet een native enum datatype. Voorbeelden die hier worden gegeven, kunnen verschillende manieren omvatten om tellers te simuleren, alternatieven en mogelijke afwegingen.

Definitie bepalen met Object.freeze ()

5.1

JavaScript biedt geen directe ondersteuning voor opsommers, maar de functionaliteit van een opsomming kan worden nagebootst.

// 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");
}

De bovenstaande opsommingdefinitie kan ook als volgt worden geschreven:

var TestEnum = { One: 1, Two: 2, Three: 3 }
Object.freeze(TestEnum);

Daarna kunt u een variabele definiëren en afdrukken zoals eerder.

Alternatieve definitie

De methode Object.freeze() is beschikbaar sinds versie 5.1. Voor oudere versies kunt u de volgende code gebruiken (merk op dat deze ook werkt in versies 5.1 en hoger):

var ColorsEnum = {
    WHITE: 0,
    GRAY: 1,
    BLACK: 2
}
// Define a variable with a value from the enum
var currentColor = ColorsEnum.GRAY;

Een enum-variabele afdrukken

Nadat u een opsomming op een van de bovenstaande manieren hebt gedefinieerd en een variabele hebt ingesteld, kunt u zowel de waarde van de variabele als de bijbehorende naam uit de opsomming voor de waarde afdrukken. Hier is een voorbeeld:

// 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"
   } 
}

Enums implementeren met symbolen

Toen ES6 symbolen introduceerde, die zowel unieke als onveranderlijke primitieve waarden zijn die kunnen worden gebruikt als de sleutel van een eigenschap Object , in plaats van tekenreeksen als mogelijke waarden voor een opsomming te gebruiken, is het mogelijk om symbolen te gebruiken.

// 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

Het artikel Symbolen in ECMAScript 6 behandelt dit nieuwe primitieve type meer in detail.

Automatische opsommingswaarde

5.1

Dit voorbeeld laat zien hoe u automatisch een waarde kunt toewijzen aan elk item in een lijst. Dit voorkomt dat twee enums per ongeluk dezelfde waarde hebben. OPMERKING: Ondersteuning van de browser Object.freeze

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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow