MySQL Java JavaScript PHP Python HTML-CSS C-sharp

Simboluri

Simbolul sau tipul Symbol reprezintă o valoare unică.

Pentru a defini un simbol, se folosește constructorul de tip Symbol. De exemplu, să creăm un simbol simplu:

const tom = Symbol("Tom");
console.log(tom);   // Symbol(Tom)

Fiecare simbol este unic. Haideți să încercăm să creăm două simboluri identice:

const tom = Symbol("Tom");
console.log(tom);   // Symbol(Tom)

const tomas = Symbol("Tom");
console.log(tomas); // Symbol(Tom)

console.log(tom == tomas);      // false
console.log(tom === tomas);     // false

Simbolurile ca identificatori pentru proprietățile obiectelor

Domeniul principal de aplicare al simbolurilor constă în definirea identificatorilor pentru proprietățile obiectelor. Cu alte cuvinte, simbolurile permit evitarea situațiilor în care mai multe proprietăți ale unui obiect au același nume.

Această situație poate părea artificială, dar atunci când proprietățile sunt adăugate dinamic într-un program destul de mare sau într-un cod extern pe care nu-l putem controla, sarcina de a gestiona identificatorii pentru proprietăți devine mai complicată.

Pentru exemplificare, să luăm următoarea situație: într-o companie lucrează trei programatori, dintre care unul este dezvoltator senior, iar ceilalți doi sunt dezvoltatori juniori. Cu toate acestea, cei doi dezvoltatori juniori au nume identice.

De exemplu, unul dintre ei, Tom, este dezvoltatorul senior, în timp ce Sam și celălalt Tom sunt dezvoltatori juniori. Am putea reprezenta această companie astfel:

const company = {
   "Tom": "senior",
   "Sam": "junior",
   "Tom": "junior"
}
for(developer in company) {
   console.log(`${developer} - ${company[developer]}`);
}

Cu toate acestea, ieșirea în consolă va arăta că în compania noastră există doar doi dezvoltatori, deoarece numele a doi dintre ei coincid:

Tom - junior
Sam - junior

Acum să aplicăm simboluri:

const company = {
   [Symbol("Tom")]: "senior",
   [Symbol("Sam")]: "junior",
   [Symbol("Tom")]: "junior"
}
const developers = Object.getOwnPropertySymbols(company);
for(developer of developers) {
   console.log(`${developer.toString()} - ${company[developer]}`);
}

Pentru a obține toate simbolurile dintr-un obiect, se aplică funcția Object.getOwnPropertySymbols(), căreia i se furnizează obiectul. Această funcție returnează un set de simboluri pe care le putem itera într-un ciclu. Pentru a obține reprezentarea textului a simbolurilor, putem aplica metoda toString() a simbolului.

Pentru a obține valoarea, așa cum se întâmplă în general, se aplică sintaxa de acces la elementele unui array: company[developer] .În final, vom obține următoarea ieșire în consolă:

Symbol(Tom) - senior
Symbol(Sam) - junior
Symbol(Tom) - junior

De asemenea, puteți adăuga dinamic proprietăți cu identificatori simbolici în obiect:

const company = { };
company[Symbol("Tom")]= "senior";
company[Symbol("Sam")]= "junior";
company[Symbol("Tom")]= "junior";
← Lecția anterioară Lecția următoare →