JavaScript-symbol (med eksempler)

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… inlø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 Symbolsi 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 personobjektet 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 Symbolopretter 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, idså 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 Symboldatatypen 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.idoverskriver 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))

Interessante artikler...