Sök…


Anmärkningar

Vid datorprogrammering är en uppräknad typ (även kallad enumeration eller enum [..]) en datatyp som består av en uppsättning namngivna värden som kallas element, medlemmar eller teller av typen. Räknarens namn är vanligtvis identifierare som uppträder som konstanter på språket. En variabel som har förklarats ha en uppräknad typ kan tilldelas vilken som helst av tellerna som ett värde.

Wikipedia: Numrerad typ

JavaScript är svagt skrivet, variabler deklareras inte med en typ i förväg och det har inte en naturlig enum . Exempel som tillhandahålls här kan inkludera olika sätt att simulera räknare, alternativ och möjliga avvägningar.

Enum-definition med Object.freeze ()

5,1

JavaScript stöder inte direkt uppräknare men funktionaliteten hos enum kan efterliknas.

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

Ovanstående uppräkningsdefinition, kan också skrivas enligt följande:

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

Efter det kan du definiera en variabel och skriva ut som tidigare.

Alternativ definition

Object.freeze() är tillgänglig sedan version 5.1. För äldre versioner kan du använda följande kod (notera att den också fungerar i version 5.1 och senare):

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

Skriva ut en enum-variabel

När du har definierat ett enum på något av ovanstående sätt och ställt in en variabel kan du skriva ut både variabelns värde och motsvarande namn från enum för värdet. Här är ett exempel:

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

Implementera enums med symboler

Eftersom ES6 introducerade symboler , som är både unika och oföränderliga primitiva värden som kan användas som nyckeln för en Object , istället för att använda strängar som möjliga värden för enum, är det möjligt att använda symboler.

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

Artikeln Symboler i ECMAScript 6 täcker denna nya primitiva typ mer i detalj.

Automatiskt uppräkningsvärde

5,1

Detta exempel visar hur man automatiskt tilldelar ett värde till varje post i enum-lista. Detta förhindrar att två enum har samma värde av misstag. OBS: Object.freeze webbläsarsupport

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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow