logo

Výčty v JavaScriptu

Výčty v JavaScriptu představují způsob, jak definovat sadu pojmenovaných konstant, které se často používají k reprezentaci kolekce souvisejících hodnot. Přestože JavaScript nemá vestavěnou podporu pro výčty, podobné funkce lze dosáhnout pomocí objektů nebo proměnných const, aby se zlepšila čitelnost kódu a jeho udržovatelnost.

v JavaScript , Výčty nebo Výčty se používají k reprezentaci pevné sady pojmenovaných hodnot. Výčty však nejsou nativní pro JavaScript, takže jsou obvykle implementovány pomocí objektů nebo zmrazených polí.

Chcete-li zajistit neměnnost enumů v JavaScriptu, můžete postupovat podle těchto pokynů:



Metoda Object.freeze():

Jedním ze způsobů, jak vytvořit objekt podobný Enum, je definovat prostý objekt JavaScript s konstantními hodnotami vlastností a poté použít Object.freeze() aby nedošlo k další úpravě. Tím zajistíte, že objekt a jeho vlastnosti nelze měnit nebo mutovat. Můžete použít Object.freeze() způsob, jak zabránit jakýmkoli změnám objektu. Jakmile je objekt zmrazen, nemůžete přidávat, upravovat ani odstraňovat žádné z jeho vlastností. Tuto metodu můžete použít k vytvoření neměnného objektu, který představuje váš Enum.

Syntax:

Object.freeze()>

Metoda Object.defineProperty():

Pomocí metody Object.defineProperty() můžete definovat vlastnosti, které nelze změnit, přidat ani odstranit. Tuto metodu můžete použít k vytvoření vlastnosti pouze pro čtení pro každou hodnotu Enum. Pomocí metody Object.defineProperty() můžete definovat vlastnosti, které nelze změnit, přidat ani odstranit. Tuto metodu můžete použít k vytvoření vlastnosti pouze pro čtení pro každou hodnotu Enum.

Použití TypeScript : TypeScript je nadmnožina JavaScriptu, která zahrnuje podporu pro Enums. Pomocí TypeScript můžete definovat Enum způsobem, který zaručuje jejich neměnnost.

Příklad 1: V tomto příkladu vytvoříme objekt Enum nazvaný DaysOfWeek pomocí Object.freeze(). Metoda Object.freeze() činí objekt neměnným, takže nemůžeme přidávat, upravovat ani odstraňovat vlastnosti objektu.

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);>

Výstup:

0>

Symbol ES6:

Dalším přístupem k vytvoření výčtu v JavaScriptu je použití symbolů ES6. Symboly jsou jedinečné identifikátory, které nelze duplikovat a lze je použít k definování konstantních hodnot, které jsou zaručeně jedinečné a neměnné.

Příklad: V tomto příkladu definujeme výčet nazvaný myEnum pomocí Object.freeze(), abychom zabránili jakýmkoliv úpravám objektu. K vytvoření jedinečných symbolů pro každou hodnotu výčtu používáme Symbol().

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>

Výstup:

Symbol(foo) Symbol(foo) undefined>

Použití uzávěru:

K vytvoření Enum můžete také použít uzávěr. Uzávěr je funkce, která má přístup k proměnným ve svém vnějším funkčním rozsahu. Vytvořením vnitřní funkce, která vrací hodnotu, můžeme změnit proměnnou v rozsahu vnější funkce pouze pro čtení.

Příklad: V tomto příkladu používáme uzávěr k vytvoření objektu s názvem DaysOfWeek. Objekt days je definován ve vnějším rozsahu funkce a není přístupný zvenčí funkce. Vnitřní funkce get vrací hodnotu vlastnosti s daným názvem z objektu days. Vzhledem k tomu, že objekt dnů není přímo přístupný, nelze jej upravovat zvenčí uzavírky.

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>

Výstup:

0>