Ricerca…
Osservazioni
Nella programmazione per computer, un tipo enumerato (chiamato anche enumerazione o enum [..]) è un tipo di dati costituito da un insieme di valori denominati chiamati elementi, membri o enumeratori del tipo. I nomi degli enumeratori sono solitamente identificatori che si comportano come costanti nella lingua. Una variabile che è stata dichiarata con un tipo enumerato può essere assegnata a uno qualsiasi degli enumeratori come valore.
JavaScript è debolmente tipizzato, le variabili non sono dichiarate con un tipo in anticipo e non hanno un tipo di dati enum
nativo. Gli esempi forniti qui possono includere diversi modi per simulare enumeratori, alternative e possibili compromessi.
Definizione Enum con Object.freeze ()
JavaScript non supporta direttamente gli enumeratori ma la funzionalità di un enum può essere imitata.
// 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");
}
La suddetta definizione di enumerazione, può anche essere scritta come segue:
var TestEnum = { One: 1, Two: 2, Three: 3 }
Object.freeze(TestEnum);
Successivamente è possibile definire una variabile e stampare come prima.
Definizione alternativa
Il metodo Object.freeze()
è disponibile dalla versione 5.1. Per le versioni precedenti, è possibile utilizzare il seguente codice (si noti che funziona anche nelle versioni 5.1 e successive):
var ColorsEnum = {
WHITE: 0,
GRAY: 1,
BLACK: 2
}
// Define a variable with a value from the enum
var currentColor = ColorsEnum.GRAY;
Stampa di una variabile enum
Dopo aver definito un enum utilizzando uno dei metodi sopra riportati e impostando una variabile, è possibile stampare sia il valore della variabile che il nome corrispondente dall'enum per il valore. Ecco un esempio:
// 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"
}
}
Implementazione di enum utilizzando i simboli
Poiché ES6 ha introdotto Simboli , che sono valori primitivi unici e immutabili che possono essere utilizzati come chiave di una proprietà Object
, invece di utilizzare le stringhe come valori possibili per un enum, è possibile utilizzare i simboli.
// 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
I simboli nell'articolo ECMAScript 6 riguardano questo nuovo tipo primitivo più in dettaglio.
Valore di enumerazione automatica
Questo esempio mostra come assegnare automaticamente un valore a ciascuna voce in una lista di enum. Ciò impedirà a due enumerazioni di avere lo stesso valore per errore. NOTA: supporto 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;
}