În acest tutorial, veți afla despre JavaScript Symbol cu ajutorul unor exemple.
Simbol JavaScript
JavaScript ES6 a introdus un nou tip de date primitiv numit Symbol
. Simbolurile sunt imuabile (nu pot fi schimbate) și sunt unice. De exemplu,
// two symbols with the same description const value1 = Symbol('hello'); const value2 = Symbol('hello'); console.log(value1 === value2); // false
Deși valoarea 1 și valoarea 2 conțin aceeași descriere, ele sunt diferite.
Crearea unui simbol
Folosiți Symbol()
funcția pentru a crea un Symbol
. De exemplu,
// creating symbol const x = Symbol() typeof x; // symbol
Puteți trece un șir opțional ca descriere a acestuia. De exemplu,
const x = Symbol('hey'); console.log(x); // Symbol(hey)
Descrierea simbolului de acces
Pentru a accesa descrierea unui simbol, folosim .
operatorul. De exemplu,
const x = Symbol('hey'); console.log(x.description); // hey
Adăugați simbolul ca cheie de obiect
Puteți adăuga simboluri ca cheie într-un obiect folosind paranteze pătrate ()
. De exemplu,
let id = Symbol("id"); let person = ( name: "Jack", // adding symbol as a key (id): 123 // not "id": 123 ); console.log(person); // (name: "Jack", Symbol(id): 123)
Simbolurile nu sunt incluse în pentru … în buclă
for… in
Bucla nu iteraŃia asupra proprietăților simbolice. De exemplu,
let id = Symbol("id"); let person = ( name: "Jack", age: 25, (id): 12 ); // using for… in for (let key in person) ( console.log(key); )
Ieșire
numele vârstei
Beneficiul utilizării simbolurilor în obiect
Dacă același fragment de cod este utilizat în diferite programe, atunci este mai bine să îl utilizați Symbols
în cheia obiect. Acest lucru se datorează faptului că puteți utiliza același nume de cheie în coduri diferite și puteți evita problemele de duplicare. De exemplu,
let person = ( name: "Jack" ); // creating Symbol let id = Symbol("id"); // adding symbol as a key person(id) = 12;
În programul de mai sus, dacă person
obiectul este folosit și de un alt program, atunci nu ați dori să adăugați o proprietate care poate fi accesată sau modificată de un alt program. Prin urmare Symbol
, utilizând , creați o proprietate unică pe care o puteți utiliza.
Acum, dacă și celălalt program trebuie să utilizeze o proprietate numită id , trebuie doar să adăugați un simbol numit id
și nu vor exista probleme de duplicare. De exemplu,
let person = ( name: "Jack" ); let id = Symbol("id"); person(id) = "Another value";
În programul de mai sus, chiar dacă același nume este folosit pentru a stoca valori, Symbol
tipul de date va avea o valoare unică.
În programul de mai sus, dacă s-a folosit cheia șir, atunci programul ulterior ar fi schimbat valoarea proprietății. De exemplu,
let person = ( name: "Jack" ); // using string as key person.id = 12; console.log(person.id); // 12 // Another program overwrites value person.id = 'Another value'; console.log(person.id); // Another value
În programul de mai sus, al doilea user.id
suprascrie valoarea anterioară.
Metode de simbol
Există diferite metode disponibile cu Symbol.
Metodă | Descriere |
---|---|
for() | Caută simboluri existente |
keyFor() | Returnează o cheie de simbol partajată din registrul global de simboluri. |
toSource() | Returnează un șir care conține sursa obiectului Symbol |
toString() | Returnează un șir care conține descrierea simbolului |
valueOf() | Returnează valoarea primitivă a obiectului Symbol. |
Exemplu: Metode simbol
// get symbol by name let sym = Symbol.for('hello'); let sym1 = Symbol.for('id'); // get name by symbol console.log( Symbol.keyFor(sym) ); // hello console.log( Symbol.keyFor(sym1) ); // id
Proprietăți simbol
Proprietăți | Descriere |
---|---|
asyncIterator | Returnează AsyncIterator implicit pentru un obiect |
hasInstance | Determină dacă un obiect constructor recunoaște un obiect ca instanță |
isConcatSpreadable | Indică dacă un obiect trebuie aplatizat cu elementele sale de matrice |
iterator | Returnează iteratorul implicit pentru un obiect |
match | Se potrivește cu un șir |
matchAll | Returnează un iterator care produce potriviri ale expresiei regulate împotriva unui șir |
replace | Înlocuiește șirurile potrivite ale unui șir |
search | Returnează indexul într-un șir care se potrivește cu expresia regulată |
split | Împarte un șir la indicii care se potrivesc cu o expresie regulată |
species | Creează obiecte derivate |
toPrimitive | Convertește un obiect într-o valoare primitivă |
toStringTag | Oferă descrierea implicită a unui obiect |
description | Returnează un șir care conține descrierea simbolului |
Exemplu: Proprietatea simbolului Exemplu
const x = Symbol('hey'); // description property console.log(x.description); // hey const stringArray = ('a', 'b', 'c'); const numberArray = (1, 2, 3); // isConcatSpreadable property numberArray(Symbol.isConcatSpreadable) = false; let result = stringArray.concat(numberArray); console.log(result); // ("a", "b", "c", (1, 2, 3))