U ovom ćete tutorijalu uz primjere naučiti o JavaScript simbolu.
JavaScript simbol
JavaScript ES6 predstavio je novi primitivni tip podataka tzv Symbol
. Simboli su nepromjenjivi (ne mogu se mijenjati) i jedinstveni su. Na primjer,
// two symbols with the same description const value1 = Symbol('hello'); const value2 = Symbol('hello'); console.log(value1 === value2); // false
Iako vrijednost1 i vrijednost2 sadrže isti opis, oni se razlikuju.
Stvaranje simbola
Symbol()
Funkciju koristite za stvaranje a Symbol
. Na primjer,
// creating symbol const x = Symbol() typeof x; // symbol
Kao opis možete dodati neobavezni niz. Na primjer,
const x = Symbol('hey'); console.log(x); // Symbol(hey)
Opis simbola pristupa
Za pristup opisu simbola koristimo .
operator. Na primjer,
const x = Symbol('hey'); console.log(x.description); // hey
Dodajte simbol kao ključ objekta
Možete dodati simbole kao ključ u objekt pomoću uglatih zagrada ()
. Na primjer,
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)
Simboli nisu uključeni u for … u Loop
for… in
Petlje ne mijenjajte više simboličkih svojstva. Na primjer,
let id = Symbol("id"); let person = ( name: "Jack", age: 25, (id): 12 ); // using for… in for (let key in person) ( console.log(key); )
Izlaz
ime dob
Prednost upotrebe simbola u objektu
Ako se isti isječak koda koristi u raznim programima, onda je bolje koristiti Symbols
u objektnom ključu. To je zato što možete koristiti isti naziv ključa u različitim kodovima i izbjeći probleme s dupliciranjem. Na primjer,
let person = ( name: "Jack" ); // creating Symbol let id = Symbol("id"); // adding symbol as a key person(id) = 12;
U gornjem programu, ako person
objekt koristi i drugi program, tada ne biste željeli dodati svojstvo kojem drugi program može pristupiti ili ga promijeniti. Stoga korištenjem Symbol
stvarate jedinstveno svojstvo koje možete koristiti.
Ako drugi program također treba koristiti svojstvo s imenom id , samo dodajte simbol s imenom id
i neće biti problema s dupliciranjem. Na primjer,
let person = ( name: "Jack" ); let id = Symbol("id"); person(id) = "Another value";
U gore navedenom programu, čak i ako se isti naziv koristi za pohranu vrijednosti, Symbol
vrsta podataka imat će jedinstvenu vrijednost.
U gornjem programu, da je korišten ključ niza, tada bi kasniji program promijenio vrijednost svojstva. Na primjer,
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
U gornjem programu drugi user.id
prepisuje prethodnu vrijednost.
Metode simbola
Uz Symbol su dostupne razne metode.
Metoda | Opis |
---|---|
for() | Pretražuje postojeće simbole |
keyFor() | Vraća zajednički ključ simbola iz globalnog registra simbola. |
toSource() | Vraća niz koji sadrži izvor objekta Symbol |
toString() | Vraća niz koji sadrži opis simbola |
valueOf() | Vraća primitivnu vrijednost objekta Symbol. |
Primjer: Metode simbola
// 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
Svojstva simbola
Svojstva | Opis |
---|---|
asyncIterator | Vraća zadani AsyncIterator za objekt |
hasInstance | Određuje prepoznaje li objekt konstruktora objekt kao svoju instancu |
isConcatSpreadable | Označava treba li objekt izravnati na elemente niza |
iterator | Vraća zadani iterator za objekt |
match | Podudara se s nizom |
matchAll | Vraća iterator koji daje podudaranja regularnog izraza s nizom |
replace | Zamjenjuje podudaranja podniza niza |
search | Vraća indeks unutar niza koji odgovara regularnom izrazu |
split | Dijeli niz na indeksima koji se podudaraju s regularnim izrazom |
species | Stvara izvedene objekte |
toPrimitive | Pretvara objekt u primitivnu vrijednost |
toStringTag | Daje zadani opis objekta |
description | Vraća niz koji sadrži opis simbola |
Primjer: Primjer svojstava simbola
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))