I den här handledningen lär du dig JavaScript-symbolen med hjälp av exempel.
JavaScript-symbol
JavaScript ES6 introducerade en ny primitiv datatyp som heter Symbol
. Symboler är oföränderliga (kan inte ändras) och är unika. Till exempel,
// two symbols with the same description const value1 = Symbol('hello'); const value2 = Symbol('hello'); console.log(value1 === value2); // false
Även om värde1 och värde2 innehåller samma beskrivning är de olika.
Skapa symbol
Du använder Symbol()
funktionen för att skapa en Symbol
. Till exempel,
// creating symbol const x = Symbol() typeof x; // symbol
Du kan skicka en valfri sträng som beskrivning. Till exempel,
const x = Symbol('hey'); console.log(x); // Symbol(hey)
Åtkomstsymbol Beskrivning
För att komma åt beskrivningen av en symbol använder vi .
operatören. Till exempel,
const x = Symbol('hey'); console.log(x.description); // hey
Lägg till symbol som objektnyckel
Du kan lägga till symboler som en nyckel i ett objekt med hakparenteser ()
. Till exempel,
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 ingår inte i för … i Loop
Den for… in
slinga inte iterera över symboliska egenskaper. Till exempel,
let id = Symbol("id"); let person = ( name: "Jack", age: 25, (id): 12 ); // using for… in for (let key in person) ( console.log(key); )
Produktion
namn ålder
Fördelen med att använda symboler i objektet
Om samma kodavsnitt används i olika program är det bättre att använda det Symbols
i objektnyckeln. Det beror på att du kan använda samma nyckelnamn i olika koder och undvika dubbleringsproblem. Till exempel,
let person = ( name: "Jack" ); // creating Symbol let id = Symbol("id"); // adding symbol as a key person(id) = 12;
I ovanstående program, om person
objektet också används av ett annat program, skulle du inte vilja lägga till en egenskap som kan nås eller ändras av ett annat program. Därför Symbol
skapar du en unik egenskap som du kan använda genom att använda.
Nu, om det andra programmet också behöver använda en egenskap med namnet id , lägg bara till en symbol med namnet id
så kommer det inte att finnas dubbleringsproblem. Till exempel,
let person = ( name: "Jack" ); let id = Symbol("id"); person(id) = "Another value";
I ovanstående program, även om samma namn används för att lagra värden, Symbol
kommer datatypen att ha ett unikt värde.
I ovanstående program, om strängnyckeln användes, skulle det senare programmet ha ändrat värdet på egenskapen. Till exempel,
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 ovan user.id
skriver den andra över det tidigare värdet.
Symbolmetoder
Det finns olika metoder tillgängliga med Symbol.
Metod | Beskrivning |
---|---|
for() | Söker efter befintliga symboler |
keyFor() | Returnerar en delad symbolnyckel från det globala symbolregistret. |
toSource() | Returnerar en sträng som innehåller källan till symbolobjektet |
toString() | Returnerar en sträng som innehåller beskrivningen av symbolen |
valueOf() | Returnerar det primitiva värdet för symbolobjektet. |
Exempel: 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 | Beskrivning |
---|---|
asyncIterator | Returnerar standard AsyncIterator för ett objekt |
hasInstance | Avgör om ett konstruktörobjekt känner igen ett objekt som dess instans |
isConcatSpreadable | Indikerar om ett objekt ska platta till dess arrayelement |
iterator | Returnerar standard iteratorn för ett objekt |
match | Matchar mot en sträng |
matchAll | Returnerar en iterator som ger matchningar av det reguljära uttrycket mot en sträng |
replace | Ersätter matchade strängar av en sträng |
search | Returnerar indexet i en sträng som matchar det reguljära uttrycket |
split | Delar en sträng på de index som matchar ett reguljärt uttryck |
species | Skapar härledda objekt |
toPrimitive | Konverterar ett objekt till ett primitivt värde |
toStringTag | Ger standardbeskrivningen för ett objekt |
description | Returnerar en sträng som innehåller beskrivningen av symbolen |
Exempel: Symbolegenskaper Exempel
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))