V tej vadnici boste s pomočjo primerov spoznali simbol JavaScript.
JavaScript simbol
JavaScript ES6 je predstavil novo primitivno vrsto podatkov, imenovano Symbol
. Simboli so nespremenljivi (jih ni mogoče spremeniti) in so edinstveni. Na primer
// two symbols with the same description const value1 = Symbol('hello'); const value2 = Symbol('hello'); console.log(value1 === value2); // false
Čeprav vrednost1 in vrednost2 vsebujeta isti opis, sta različni.
Ustvarjanje simbola
S Symbol()
funkcijo ustvarite datoteko Symbol
. Na primer
// creating symbol const x = Symbol() typeof x; // symbol
Kot opis lahko posredujete neobvezen niz. Na primer
const x = Symbol('hey'); console.log(x); // Symbol(hey)
Opis simbola za dostop
Za dostop do opisa simbola uporabimo .
operator. Na primer
const x = Symbol('hey'); console.log(x.description); // hey
Dodajte simbol kot ključ predmeta
Simbole lahko dodate kot ključ v predmetu z uporabo oglatih oklepajev ()
. Na primer
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 niso vključeni v za … v zanki
for… in
Zanke ne ponavlja več simbolnih lastnosti. Na primer
let id = Symbol("id"); let person = ( name: "Jack", age: 25, (id): 12 ); // using for… in for (let key in person) ( console.log(key); )
Izhod
ime starost
Prednost uporabe simbolov v objektu
Če se isti delček kode uporablja v različnih programih, potem je bolje uporabiti Symbols
v ključu predmeta. To je zato, ker lahko isto ime ključa uporabite v različnih kodah in se izognete težavam s podvajanjem. Na primer
let person = ( name: "Jack" ); // creating Symbol let id = Symbol("id"); // adding symbol as a key person(id) = 12;
Če v zgornjem programu person
objekt uporablja tudi drug program, ne bi želeli dodati lastnosti, do katere lahko dostopa ali jo spreminja drug program. Tako z uporabo Symbol
ustvarite edinstveno lastnost, ki jo lahko uporabite.
Če mora tudi drugi program uporabiti lastnost z imenom id , samo dodajte imenovani simbol id
in ne bo težav s podvajanjem. Na primer
let person = ( name: "Jack" ); let id = Symbol("id"); person(id) = "Another value";
V zgornjem programu, tudi če se isto ime uporablja za shranjevanje vrednosti, Symbol
bo imel podatkovni tip edinstveno vrednost.
Če bi bil v zgornjem programu uporabljen nizni ključ, bi poznejši program spremenil vrednost lastnosti. Na primer
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
V zgornjem programu drugi user.id
prepiše prejšnjo vrednost.
Simbolne metode
Z Symbolom so na voljo različne metode.
Metoda | Opis |
---|---|
for() | Išče obstoječe simbole |
keyFor() | Vrne skupni ključ simbola iz globalnega registra simbolov. |
toSource() | Vrne niz, ki vsebuje vir predmeta Symbol |
toString() | Vrne niz, ki vsebuje opis simbola |
valueOf() | Vrne primitivno vrednost predmeta Symbol. |
Primer: Simbolne metode
// 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
Lastnosti simbola
Lastnosti | Opis |
---|---|
asyncIterator | Vrne privzeti AsyncIterator za objekt |
hasInstance | Določa, ali objekt konstruktorja prepozna objekt kot svoj primerek |
isConcatSpreadable | Označuje, ali je treba objekt sploščiti na elemente polja |
iterator | Vrne privzeti iterator za objekt |
match | Ujema se z vrvico |
matchAll | Vrne iterator, ki poda ujemanja regularnega izraza z nizom |
replace | Nadomešča ujemajoče se podnize niza |
search | Vrne indeks v nizu, ki se ujema z regularnim izrazom |
split | Razdeli niz na indekse, ki se ujemajo z regularnim izrazom |
species | Ustvari izpeljane predmete |
toPrimitive | Pretvori objekt v primitivno vrednost |
toStringTag | Daje privzeti opis predmeta |
description | Vrne niz, ki vsebuje opis simbola |
Primer: Primer lastnosti 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))