Enums i JavaScript er en måde at definere et sæt af navngivne konstanter, ofte brugt til at repræsentere en samling af relaterede værdier. Selvom JavaScript ikke har indbygget understøttelse af enums, kan lignende funktionalitet opnås ved hjælp af objekter eller const-variabler for at forbedre kodelæsbarhed og vedligeholdelse.
I JavaScript , Enumerations eller Enums bruges til at repræsentere et fast sæt af navngivne værdier. Enums er dog ikke hjemmehørende i JavaScript, så de implementeres normalt ved hjælp af objekter eller frosne arrays.
For at sikre uforanderligheden af Enums i JavaScript kan du følge disse retningslinjer:
Object.freeze() Metode:
En måde at oprette et Enum-lignende objekt på er ved at definere et almindeligt JavaScript-objekt med konstante egenskabsværdier og derefter bruge Object.freeze() for at forhindre yderligere ændringer. Dette vil sikre, at objektet og dets egenskaber ikke kan ændres eller muteres. Du kan bruge Object.freeze() metode til at forhindre ændringer i objektet. Når først et objekt er frosset, kan du ikke tilføje, ændre eller slette nogen af dets egenskaber. Du kan bruge denne metode til at skabe et uforanderligt objekt, der repræsenterer din Enum.
Syntaks:
Object.freeze()>
Object.defineProperty() Metode:
Du kan bruge metoden Object.defineProperty() til at definere egenskaber, der ikke kan ændres, tilføjes eller slettes. Du kan bruge denne metode til at oprette en skrivebeskyttet egenskab for hver Enum-værdi. Du kan bruge metoden Object.defineProperty() til at definere egenskaber, der ikke kan ændres, tilføjes eller slettes. Du kan bruge denne metode til at oprette en skrivebeskyttet egenskab for hver Enum-værdi.
Brug TypeScript : TypeScript er et supersæt af JavaScript, der inkluderer understøttelse af Enums. Ved at bruge TypeScript kan du definere Enums på en måde, der garanterer deres uforanderlighed.
Eksempel 1: I dette eksempel opretter vi et Enum-objekt kaldet DaysOfWeek ved hjælp af Object.freeze(). Object.freeze()-metoden gør objektet uforanderligt, så vi kan ikke tilføje, ændre eller slette egenskaber fra 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:
En anden tilgang til at oprette en Enum i JavaScript er at bruge ES6-symboler. Symboler er unikke identifikatorer, der ikke kan duplikeres og kan bruges til at definere konstante værdier, der med garanti er unikke og uforanderlige.
Eksempel: I dette eksempel definerer vi en enum kaldet myEnum ved hjælp af Object.freeze() for at forhindre eventuelle ændringer af objektet. Vi bruger Symbol() til at skabe unikke symboler for hver enum-værdi.
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>
Brug af en lukning:
Du kan også bruge en lukning til at oprette en Enum. En lukning er en funktion, der har adgang til variabler i sit ydre funktionsområde. Ved at oprette en indre funktion, der returnerer en værdi, kan vi gøre variablen i den ydre funktions omfang skrivebeskyttet.
Eksempel: I dette eksempel bruger vi en lukning til at oprette et objekt kaldet DaysOfWeek. Dagsobjektet er defineret i det ydre funktionsomfang og er ikke tilgængeligt uden for funktionen. Den indre funktion get returnerer værdien af egenskaben med det givne navn fra dagsobjektet. Da dagsobjektet ikke er direkte tilgængeligt, kan det ikke ændres uden for lukningen.
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>