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








