Selles õpetuses saate näidete abil õppida JavaScripti sümbolit.
JavaScripti sümbol
JavaScripti ES6 juurutas uue primitiivse andmetüübi nimega Symbol
. Sümbolid on muutumatud (neid ei saa muuta) ja need on kordumatud. Näiteks,
// two symbols with the same description const value1 = Symbol('hello'); const value2 = Symbol('hello'); console.log(value1 === value2); // false
Kuigi väärtus1 ja väärtus2 sisaldavad mõlemat sama kirjeldust, on need erinevad.
Sümboli loomine
Kasutate Symbol()
funktsioon luua Symbol
. Näiteks,
// creating symbol const x = Symbol() typeof x; // symbol
Selle kirjeldusena saate edastada valikulise stringi. Näiteks,
const x = Symbol('hey'); console.log(x); // Symbol(hey)
Juurdepääsu sümbol Kirjeldus
Sümboli kirjeldusele juurde pääsemiseks kasutame .
operaatorit. Näiteks,
const x = Symbol('hey'); console.log(x.description); // hey
Lisa sümbol objekti võtmena
Nurksulgudes saate objekti juurde võtmena lisada sümboleid ()
. Näiteks,
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)
Sümbolid ei sisaldu üksuses… Loopis
for… in
Loop ei Kerrata üle Sümbolite omadused. Näiteks,
let id = Symbol("id"); let person = ( name: "Jack", age: 25, (id): 12 ); // using for… in for (let key in person) ( console.log(key); )
Väljund
nime vanus
Sümbolite kasutamise eelis objektil
Kui sama koodilõiku kasutatakse erinevates programmides, on parem seda kasutada Symbols
objektivõtmes. Selle põhjuseks on see, et saate kasutada sama võtmenime erinevates koodides ja vältida dubleerimisprobleeme. Näiteks,
let person = ( name: "Jack" ); // creating Symbol let id = Symbol("id"); // adding symbol as a key person(id) = 12;
Kui ülalnimetatud programmis kasutab person
objekti ka teine programm, ei soovi te lisada atribuuti, millele saab juurde pääseda või mida teine programm saab muuta. Seega Symbol
loote kasutamisega ainulaadse atribuudi, mida saate kasutada.
Kui teine programm peab kasutama ka atribuuti nimega id , lisage lihtsalt nimega sümbol id
ja dubleerimisprobleeme ei teki. Näiteks,
let person = ( name: "Jack" ); let id = Symbol("id"); person(id) = "Another value";
Isegi kui ülalnimetatud programmis kasutatakse väärtuste salvestamiseks sama nime, on Symbol
andmetüübil ainulaadne väärtus.
Kui ülaltoodud programmis oleks kasutatud stringivõtit, oleks hilisem programm atribuudi väärtust muutnud. Näiteks,
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
Ülaltoodud programmis user.id
kirjutab teine eelmise väärtuse üle.
Sümbolimeetodid
Symboliga on saadaval erinevaid meetodeid.
Meetod | Kirjeldus |
---|---|
for() | Otsib olemasolevaid sümboleid |
keyFor() | Tagastab jagatud sümbolivõtme globaalsest sümboliregistrist. |
toSource() | Tagastab stringi, mis sisaldab objekti Sümbol allikat |
toString() | Tagastab stringi, mis sisaldab sümboli kirjeldust |
valueOf() | Tagastab objekti Sümbol ürgväärtuse. |
Näide: sümbolimeetodid
// 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
Sümbol Atribuudid
Atribuudid | Kirjeldus |
---|---|
asyncIterator | Tagastab objekti vaikimisi AsyncIteratori |
hasInstance | Määrab, kas konstruktori objekt tunneb objekti eksemplarina ära |
isConcatSpreadable | Näitab, kas objekti tuleks selle massiivi elementide suhtes lamedaks muuta |
iterator | Tagastab objekti vaikimisi iteraatori |
match | Vasted nöörile |
matchAll | Tagastab iteraatori, mis annab regulaaravaldise vaste stringile |
replace | Asendab stringi sobitatud alamstringid |
search | Tagastab regulaaravaldisega vastava stringi indeksi |
split | Jagab regulaaravaldisega sobivate indeksite juures stringi |
species | Loob tuletatud esemeid |
toPrimitive | Teisendab objekti primitiivseks väärtuseks |
toStringTag | Annab objekti vaikekirjelduse |
description | Tagastab stringi, mis sisaldab sümboli kirjeldust |
Näide: Sümbolite omaduste näide
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))