Symbol
Karakteristike
Symbol je novi tip podataka koji je došao sa ES2015 standardom. Symbol predstavlja jedinstveni token. Simbol se kreira koristeći funkciju Symbol().
1 2 3 |
noviSymbol1 = Symbol(); noviSymbol2 = Symbol(); noviSymbol1 == noviSymbol2; // Vraća false |
Symbol može biti kreiran i sa label-om, koji mu se prosledi kao string. Taj label ne utiče na vrednost symbola, ali je koristan pri debagovanju i može da prikaže koristeći metod toString() nad symbol-om.
1 2 |
let nekiSymbol = Symbol('nekiLabel'); console.log(nekiSimbol); // Vraća: Symbol('nekiLabel') |
Namena: Ključ svojstva objekta
Uglavnom se “symbol” koristi kao ključ svojstva objekta, kada želimo da zaštitimo to svojstvo. Kada se koristi “symbol” kao ključ svojstva objekta, potrebno je da se koriste uglaste zagrade za pristup svojstvu (tzv. “bracket notation”). Takva svojstvo imaju sledeće karakteristike:
- Jedinstveno svojstvo
- Svojstvo ne može da se nabraja (eng. enumerated) kroz “for…in” petlju
- Svosjtvo ignorišu metode: Object.keys(), Object.getOwnPropertyNames() i JSON.stringify()
1 2 3 4 5 6 7 8 9 10 |
let user = {}; let email = Symbol(); user.name = 'Dragoljub'; user.age = 44; Object.keys(user); // Vraća: Array [ "name", "age" ] Object.getOwnPropertyNames(user); // Vraća: Array [ "name", "age" ] JSON.stringify(user); // Vraća: "{"name":"Dragoljub","age":44}" |
Treba napomenuti da privatnost ovoga svojstva nije 100%, jer ipak postoji način za pristup svojstvu preko metoda “.getOwnPropertySymbols()” i .ownKeys():
1 2 |
Object.getOwnPropertySymbols(user); // Vraća: Array [ Symbol() ] Reflect.ownKeys(user) // Vraća: Array [ "name", "age", Symbol() ] |