Ce face Symbol / Symbol.for
Fiecare apel Symbol("descriere") creează o valoare nouă, diferită de oricare alta, chiar cu aceeași descriere. Ca cheie de proprietate, un simbol nu apare în for...in, Object.keys sau JSON.stringify, deci poți atașa date unui obiect fără să-i strici structura.
Symbol.for(cheie) folosește un registru global: returnează același simbol pentru aceeași cheie, oriunde în program. Symbol.keyFor(simbol) returnează cheia unui simbol din registru (sau undefined). toString() dă "Symbol(descriere)", iar description doar descrierea.
Limbajul folosește simboluri predefinite pentru comportamente speciale: Symbol.iterator face un obiect parcurgibil cu for...of, Symbol.toPrimitive controlează conversia în text sau număr.
Parametri
| Parametru | Descriere |
|---|---|
descriere |
Opțional. Text folosit doar la afișare și depanare. |
cheie |
Pentru Symbol.for: numele din registrul global. |
Ce returnează
O valoare de tip symbol.
Exemple
Exemplul 1: Simboluri unice și registrul global
const a = Symbol("id");
const b = Symbol("id");
console.log(a === b, typeof a, a.toString(), a.description);
const g1 = Symbol.for("aplicatie.id");
const g2 = Symbol.for("aplicatie.id");
console.log(g1 === g2, Symbol.keyFor(g1), Symbol.keyFor(a));
Rezultat
false symbol Symbol(id) id
true aplicatie.id undefined
Exemplul 2: Chei ascunse și Symbol.iterator
const intern = Symbol("intern");
const produs = { nume: "Carte", [intern]: "nu apare în JSON" };
console.log(JSON.stringify(produs), produs[intern]);
const interval = {
*[Symbol.iterator]() {
for (let i = 1; i <= 3; i++) yield i * 10;
},
};
console.log([...interval]);
Rezultat
{"nume":"Carte"} nu apare în JSON
[ 10, 20, 30 ]
Greșeli frecvente
- Scrii
new Symbol()și primeștiTypeError: Symbol is not a constructor. Simbolurile se creează fărănew. - Lipești un simbol de un text cu
+și primeștiTypeError. Foloseștesimbol.toString()sausimbol.description.
Comenzi înrudite
Object.getOwnPropertyNames / getOwnPropertySymbols: Returnează toate cheile proprii ale unui obiect, inclusiv cele ascunse (neenumerabile) sau de tip Symbol.for...of: Parcurge pe rând elementele unui tablou, ale unui șir sau ale altei colecții.Proxy / Proxy.revocable: Învelește un obiect și interceptează operațiile pe el: citire, scriere, ștergere, apel.