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








