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… in
Silmukka 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ää Symbols
sitä 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 person
objektia 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 Symbol
luot, luomalla ainutlaatuisen ominaisuuden, jota voit käyttää.
Jos toisen ohjelman on myös käytettävä ominaisuutta nimeltä ID , lisää vain nimetty symboli, id
eikä 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ä, Symbol
tietotyypillä 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.id
korvaa 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))