JavaScript-symbol (med eksempler)

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… inlø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 Symbolsden 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 personobjektet 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 Symboldatatypen 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.idoverskriver 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))

Interessante artikler...