I denne vejledning lærer du om JavaScript-symbol ved hjælp af eksempler.
JavaScript-symbol
JavaScript ES6 introducerede en ny primitiv datatype kaldet Symbol
. Symboler er uforanderlige (kan ikke ændres) og er unikke. For eksempel,
// two symbols with the same description const value1 = Symbol('hello'); const value2 = Symbol('hello'); console.log(value1 === value2); // false
Selvom værdi1 og værdi2 begge indeholder den samme beskrivelse, er de forskellige.
Opretter symbol
Du bruger Symbol()
funktionen til at oprette en Symbol
. For eksempel,
// creating symbol const x = Symbol() typeof x; // symbol
Du kan videregive en valgfri streng som dens beskrivelse. For eksempel,
const x = Symbol('hey'); console.log(x); // Symbol(hey)
Adgangssymbol Beskrivelse
For at få adgang til beskrivelsen af et symbol bruger vi .
operatøren. For eksempel,
const x = Symbol('hey'); console.log(x.description); // hey
Tilføj symbol som objektnøgle
Du kan tilføje symboler som en nøgle i et objekt ved hjælp af 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 inkluderet i … i Loop
Den for… in
løkke gør iterate ikke slut symbolske egenskaber. 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); )
Produktion
navn alder
Fordel ved at bruge symboler i objekt
Hvis det samme kodestykke bruges i forskellige programmer, er det bedre at bruge det Symbols
i objektnøglen. Det er fordi du kan bruge det samme nøglenavn i forskellige koder og undgå duplikationsproblemer. For eksempel,
let person = ( name: "Jack" ); // creating Symbol let id = Symbol("id"); // adding symbol as a key person(id) = 12;
I det ovennævnte program, hvis person
objektet også bruges af et andet program, vil du ikke tilføje en egenskab, der kan tilgås eller ændres af et andet program. Derfor ved at bruge Symbol
opretter du en unik ejendom, som du kan bruge.
Hvis det andet program nu også skal bruge en egenskab ved navn id , skal du blot tilføje et symbol med navnet, id
så vil der ikke være dobbeltproblemer. For eksempel,
let person = ( name: "Jack" ); let id = Symbol("id"); person(id) = "Another value";
I ovenstående program, selvom det samme navn bruges til at gemme værdier, vil Symbol
datatypen have en unik værdi.
I strengprogrammet, hvis strengnøglen blev brugt, ville det senere program have ændret ejendommens værdi. 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 ovenstående program user.id
overskriver det andet den forrige værdi.
Symbolmetoder
Der er forskellige metoder til rådighed med Symbol.
Metode | Beskrivelse |
---|---|
for() | Søger efter eksisterende symboler |
keyFor() | Returnerer en delt symbolnøgle fra det globale symbolregister. |
toSource() | Returnerer en streng, der indeholder kilden til symbolobjektet |
toString() | Returnerer en streng, der indeholder beskrivelsen af symbolet |
valueOf() | Returnerer den primitive værdi af 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
Symbolegenskaber
Ejendomme | Beskrivelse |
---|---|
asyncIterator | Returnerer standard AsyncIterator for et objekt |
hasInstance | Bestemmer, om et konstruktørobjekt genkender et objekt som dets forekomst |
isConcatSpreadable | Angiver, om et objekt skal være fladt til dets arrayelementer |
iterator | Returnerer standard iteratoren for et objekt |
match | Matcher mod en streng |
matchAll | Returnerer en iterator, der giver matches af det regulære udtryk mod en streng |
replace | Erstatter matchede strenge af en streng |
search | Returnerer indekset i en streng, der matcher det regulære udtryk |
split | Opdeler en streng ved de indekser, der matcher et regulært udtryk |
species | Opretter afledte objekter |
toPrimitive | Konverterer et objekt til en primitiv værdi |
toStringTag | Giver standardbeskrivelsen af et objekt |
description | Returnerer en streng, der indeholder beskrivelsen af symbolet |
Eksempel: Symbolegenskaber 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))