JavaScript-symboli (esimerkkejä)

Tässä opetusohjelmassa opit JavaScript-symbolista esimerkkien avulla.

JavaScript-symboli

JavaScript ES6 esitteli uuden primitiivisen tietotyypin nimeltä Symbol. Symbolit ovat muuttumattomia (niitä ei voi muuttaa) ja ne ovat ainutlaatuisia. Esimerkiksi,

 // two symbols with the same description const value1 = Symbol('hello'); const value2 = Symbol('hello'); console.log(value1 === value2); // false

Vaikka arvo1 ja arvo2 sisältävät molemmat saman kuvauksen, ne ovat erilaisia.

Symbolin luominen

Käytät Symbol()toimintoa luoda Symbol. Esimerkiksi,

 // creating symbol const x = Symbol() typeof x; // symbol

Voit välittää valinnaisen merkkijonon kuvaukseksi. Esimerkiksi,

 const x = Symbol('hey'); console.log(x); // Symbol(hey)

Käyttömerkin kuvaus

Symbolin kuvaukseen pääsemme käyttämällä .operaattoria. Esimerkiksi,

 const x = Symbol('hey'); console.log(x.description); // hey

Lisää symboli objektiavaimeksi

Voit lisätä symboleja objektin avaimena hakasulkeilla (). Esimerkiksi,

 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)

Symbolit eivät sisälly… -silmukkaan

for… inSilmukka ei kerrata yli symbolinen ominaisuuksia. Esimerkiksi,

 let id = Symbol("id"); let person = ( name: "Jack", age: 25, (id): 12 ); // using for… in for (let key in person) ( console.log(key); )

Tuotos

 nimi Ikä

Symbolien käytön etu objektissa

Jos samaa koodinpätkää käytetään eri ohjelmissa, on parempi käyttää Symbolssitä objektiavaimessa. Se johtuu siitä, että voit käyttää samaa avaimen nimeä eri koodeissa ja välttää päällekkäisyyksiä. Esimerkiksi,

 let person = ( name: "Jack" ); // creating Symbol let id = Symbol("id"); // adding symbol as a key person(id) = 12;

Jos personobjektia käyttää toinen ohjelma myös yllä olevassa ohjelmassa, et halua lisätä ominaisuutta, johon toinen ohjelma pääsee käsiksi tai jota se voi muuttaa. Näin Symbolluot, luomalla ainutlaatuisen ominaisuuden, jota voit käyttää.

Jos toisen ohjelman on myös käytettävä ominaisuutta nimeltä ID , lisää vain nimetty symboli, ideikä kopiointiongelmia ole. Esimerkiksi,

 let person = ( name: "Jack" ); let id = Symbol("id"); person(id) = "Another value";

Vaikka edellisessä ohjelmassa arvojen tallentamiseen käytetään samaa nimeä, Symboltietotyypillä on ainutlaatuinen arvo.

Jos merkkijonoavainta käytettiin yllä olevassa ohjelmassa, myöhempi ohjelma olisi muuttanut ominaisuuden arvoa. Esimerkiksi,

 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

Edellä olevassa ohjelmassa toinen user.idkorvaa edellisen arvon.

Symbolimenetelmät

Symbolilla on saatavana useita menetelmiä.

Menetelmä Kuvaus
for() Hakee olemassa olevia symboleja
keyFor() Palauttaa jaetun symboliavain globaalista symbolirekisteristä.
toSource() Palauttaa merkkijonon, joka sisältää Symbol-objektin lähteen
toString() Palauttaa merkkijonon, joka sisältää symbolin kuvauksen
valueOf() Palauttaa Symbol-objektin primitiivisen arvon.

Esimerkki: Symbolimenetelmät

 // 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

Symbolien ominaisuudet

Ominaisuudet Kuvaus
asyncIterator Palauttaa oletusasetuksen AsyncIterator objektille
hasInstance Määrittää, tunnistaako konstruktoriobjekti objektin ilmentymänään
isConcatSpreadable Osoittaa, onko objekti tasoitettava matriisielementteihinsä
iterator Palauttaa objektin oletusarvoisen iteraattorin
match Ottelut merkkijonoa vastaan
matchAll Palauttaa iteraattorin, joka tuottaa säännöllisen lausekkeen vastaavuudet merkkijonoa vastaan
replace Korvaa merkkijonon yhteensopivat alaotsakkeet
search Palauttaa indeksin merkkijonossa, joka vastaa säännöllistä lauseketta
split Jakaa merkkijonon säännöllisen lausekkeen vastaaviin indekseihin
species Luo johdettuja esineitä
toPrimitive Muuntaa kohteen primitiiviseksi arvoksi
toStringTag Antaa objektin oletuskuvan
description Palauttaa merkkijonon, joka sisältää symbolin kuvauksen

Esimerkki: Symboliominaisuuksien esimerkki

 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))

Mielenkiintoisia artikkeleita...