I denne veiledningen vil du lære om JavaScript Symbol ved hjelp av eksempler.
JavaScript-symbol
JavaScript ES6 introduserte en ny primitiv datatype kalt Symbol
. Symboler er uforanderlige (kan ikke endres) og er unike. For eksempel,
// two symbols with the same description const value1 = Symbol('hello'); const value2 = Symbol('hello'); console.log(value1 === value2); // false
Selv om verdi1 og verdi2 begge inneholder den samme beskrivelsen, er de forskjellige.
Opprette symbol
Du bruker Symbol()
funksjonen til å lage en Symbol
. For eksempel,
// creating symbol const x = Symbol() typeof x; // symbol
Du kan sende en valgfri streng som beskrivelse. For eksempel,
const x = Symbol('hey'); console.log(x); // Symbol(hey)
Tilgangssymbol Beskrivelse
For å få tilgang til beskrivelsen av et symbol bruker vi .
operatøren. For eksempel,
const x = Symbol('hey'); console.log(x.description); // hey
Legg til symbol som en objektnøkkel
Du kan legge til symboler som en nøkkel i et objekt ved å bruke firkantede parenteser ()
. For eksempel,
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)
Symboler er ikke inkludert i for … i Loop
Den for… in
løkke gjør itera ikke over symbolske egenskaper. For eksempel,
let id = Symbol("id"); let person = ( name: "Jack", age: 25, (id): 12 ); // using for… in for (let key in person) ( console.log(key); )
Produksjon
navn Alder
Fordel med å bruke symboler i objektet
Hvis den samme kodebiten brukes i forskjellige programmer, er det bedre å bruke Symbols
den i objektnøkkelen. Det er fordi du kan bruke samme nøkkelnavn i forskjellige koder og unngå dupliseringsproblemer. For eksempel,
let person = ( name: "Jack" ); // creating Symbol let id = Symbol("id"); // adding symbol as a key person(id) = 12;
I det ovennevnte programmet, hvis person
objektet også brukes av et annet program, vil du ikke legge til en eiendom som kan åpnes eller endres av et annet program. Derfor, ved å bruke Symbol
, oppretter du en unik eiendom som du kan bruke.
Nå, hvis det andre programmet også trenger å bruke en eiendom som heter id , er det bare å legge til et symbol som heter id
, så blir det ikke dupliseringsproblemer. For eksempel,
let person = ( name: "Jack" ); let id = Symbol("id"); person(id) = "Another value";
Selv om det samme navnet brukes til å lagre verdier i programmet ovenfor, vil Symbol
datatypen ha en unik verdi.
Hvis strengnøkkelen ble brukt i det ovennevnte programmet, ville det senere programmet ha endret verdien på eiendommen. For eksempel,
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
I programmet ovenfor user.id
overskriver det andre den forrige verdien.
Symbolmetoder
Det er forskjellige metoder tilgjengelig med Symbol.
Metode | Beskrivelse |
---|---|
for() | Søker etter eksisterende symboler |
keyFor() | Returnerer en delt symbolnøkkel fra det globale symbolregistret. |
toSource() | Returnerer en streng som inneholder kilden til Symbol-objektet |
toString() | Returnerer en streng som inneholder beskrivelsen av symbolet |
valueOf() | Returnerer den primitive verdien til symbolobjektet. |
Eksempel: Symbolmetoder
// 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
Symbolegenskaper
Egenskaper | Beskrivelse |
---|---|
asyncIterator | Returnerer standard AsyncIterator for et objekt |
hasInstance | Bestemmer om et konstruktørobjekt gjenkjenner et objekt som dets forekomst |
isConcatSpreadable | Indikerer om et objekt skal flates ut til matriseelementene |
iterator | Returnerer standard iterator for et objekt |
match | Kamper mot en streng |
matchAll | Returnerer en iterator som gir samsvar med det vanlige uttrykket mot en streng |
replace | Erstatter matchede understrenger av en streng |
search | Returnerer indeksen i en streng som samsvarer med det vanlige uttrykket |
split | Deler en streng på indeksene som samsvarer med et vanlig uttrykk |
species | Oppretter avledede objekter |
toPrimitive | Konverterer et objekt til en primitiv verdi |
toStringTag | Gir standard beskrivelse av et objekt |
description | Returnerer en streng som inneholder beskrivelsen av symbolet |
Eksempel: Symbolegenskaper Eksempel
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))