Uppräkningar i JavaScript är ett sätt att definiera en uppsättning namngivna konstanter, som ofta används för att representera en samling relaterade värden. Även om JavaScript inte har inbyggt stöd för enums, kan liknande funktionalitet uppnås med hjälp av objekt eller const-variabler för att förbättra kodläsbarhet och underhållsbarhet.
I JavaScript , Enumerations eller Enums används för att representera en fast uppsättning namngivna värden. Enums är dock inte inbyggt i JavaScript, så de implementeras vanligtvis med hjälp av objekt eller frysta arrayer.
För att säkerställa oföränderligheten av Enums i JavaScript kan du följa dessa riktlinjer:
Object.freeze() Metod:
Ett sätt att skapa ett Enum-liknande objekt är genom att definiera ett vanligt JavaScript-objekt med konstanta egenskapsvärden och sedan använda Object.freeze() för att förhindra ytterligare ändringar. Detta kommer att säkerställa att objektet och dess egenskaper inte kan ändras eller muteras. Du kan använda Object.freeze() metod för att förhindra ändringar av objektet. När ett objekt har frysts kan du inte lägga till, ändra eller ta bort någon av dess egenskaper. Du kan använda den här metoden för att skapa ett oföränderligt objekt som representerar din Enum.
Syntax:
Object.freeze()>
Object.defineProperty() Metod:
Du kan använda metoden Object.defineProperty() för att definiera egenskaper som inte kan ändras, läggas till eller tas bort. Du kan använda den här metoden för att skapa en skrivskyddad egenskap för varje Enum-värde. Du kan använda metoden Object.defineProperty() för att definiera egenskaper som inte kan ändras, läggas till eller tas bort. Du kan använda den här metoden för att skapa en skrivskyddad egenskap för varje Enum-värde.
Använda sig av TypeScript : TypeScript är en superuppsättning av JavaScript som inkluderar stöd för Enums. Med TypeScript kan du definiera Enums på ett sätt som garanterar deras oföränderlighet.
Exempel 1: I det här exemplet skapar vi ett Enum-objekt som heter DaysOfWeek med hjälp av Object.freeze(). Metoden Object.freeze() gör objektet oföränderligt, så vi kan inte lägga till, ändra eller ta bort egenskaper från objektet.
Javascript const DaysOfWeek = Object.freeze({ SUNDAY: 0, MONDAY: 1, TUESDAY: 2, WEDNESDAY: 3, THURSDAY: 4, FRIDAY: 5, SATURDAY: 6 }); // Try to modify the enum // This will not change the Sunday variable DaysOfWeek.SUNDAY = 7; console.log(DaysOfWeek.SUNDAY);> Produktion:
0>
ES6-symbol:
Ett annat sätt att skapa en Enum i JavaScript är att använda ES6-symboler. Symboler är unika identifierare som inte kan dupliceras och kan användas för att definiera konstanta värden som garanterat är unika och oföränderliga.
Exempel: I det här exemplet definierar vi en enum som heter myEnum med hjälp av Object.freeze() för att förhindra eventuella ändringar av objektet. Vi använder Symbol() för att skapa unika symboler för varje enumvärde.
Javascript const myEnum = Object.freeze({ FOO: Symbol('foo'), BAR: Symbol('bar'), BAZ: Symbol('baz') }); console.log(myEnum.FOO); // Symbol(foo) // Attempting to modify the enum // values will have no effect myEnum.FOO = Symbol('newFoo'); console.log(myEnum.FOO); // Symbol(foo) // Adding a new property to the enum // object will also have no effect myEnum.QUX = Symbol('qux'); console.log(myEnum.QUX); // undefined> Produktion:
Symbol(foo) Symbol(foo) undefined>
Använda en förslutning:
Du kan också använda en stängning för att skapa en Enum. En stängning är en funktion som har tillgång till variabler i sitt yttre funktionsomfång. Genom att skapa en inre funktion som returnerar ett värde kan vi göra variabeln i den yttre funktionsomfånget skrivskyddad.
Exempel: I det här exemplet använder vi en stängning för att skapa ett objekt som heter DaysOfWeek. Dagsobjektet definieras i det yttre funktionsomfånget och är inte tillgängligt utanför funktionen. Den inre funktionen get returnerar värdet på egenskapen med det givna namnet från dagsobjektet. Eftersom dagsobjektet inte är direkt tillgängligt kan det inte ändras från utanför stängningen.
Javascript const DaysOfWeek = (function () { const days = { SUNDAY: 0, MONDAY: 1, TUESDAY: 2, WEDNESDAY: 3, THURSDAY: 4, FRIDAY: 5, SATURDAY: 6 }; return { get: function (name) { return days[name]; } }; })(); // Try to modify the enum // This will not have any effect DaysOfWeek.SUNDAY = 7; console.log(DaysOfWeek.get('SUNDAY')); // Output: 0> Produktion:
0>