In deze tutorial leert u met behulp van voorbeelden over JavaScript Symbol.
JavaScript-symbool
De JavaScript ES6 introduceerde een nieuw primitief gegevenstype genaamd Symbol
. Symbolen zijn onveranderlijk (kunnen niet worden gewijzigd) en zijn uniek. Bijvoorbeeld,
// two symbols with the same description const value1 = Symbol('hello'); const value2 = Symbol('hello'); console.log(value1 === value2); // false
Hoewel waarde1 en waarde2 beide dezelfde beschrijving bevatten, zijn ze verschillend.
Symbool maken
U gebruikt de Symbol()
functie om een Symbol
. Bijvoorbeeld,
// creating symbol const x = Symbol() typeof x; // symbol
U kunt een optionele string doorgeven als beschrijving. Bijvoorbeeld,
const x = Symbol('hey'); console.log(x); // Symbol(hey)
Toegangssymbool Beschrijving
Om toegang te krijgen tot de beschrijving van een symbool, gebruiken we de .
operator. Bijvoorbeeld,
const x = Symbol('hey'); console.log(x.description); // hey
Voeg een symbool toe als een objectsleutel
U kunt symbolen als sleutel aan een object toevoegen met vierkante haken ()
. Bijvoorbeeld,
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)
Symbolen zijn niet opgenomen in for… in Loop
De for… in
lus herhaalt symbolische eigenschappen niet. Bijvoorbeeld,
let id = Symbol("id"); let person = ( name: "Jack", age: 25, (id): 12 ); // using for… in for (let key in person) ( console.log(key); )
Uitvoer
naam leeftijd
Voordeel van het gebruik van symbolen in objecten
Als hetzelfde codefragment in verschillende programma's wordt gebruikt, is het beter om het Symbols
in de objectsleutel te gebruiken. Het is omdat u dezelfde sleutelnaam in verschillende codes kunt gebruiken en dubbele problemen kunt voorkomen. Bijvoorbeeld,
let person = ( name: "Jack" ); // creating Symbol let id = Symbol("id"); // adding symbol as a key person(id) = 12;
Als het person
object in het bovenstaande programma ook door een ander programma wordt gebruikt, zou u geen eigenschap willen toevoegen die kan worden geopend of gewijzigd door een ander programma. Door te gebruiken Symbol
, creëer je een unieke eigenschap die je kunt gebruiken.
Als het andere programma nu ook een eigenschap met de naam id moet gebruiken , voegt u gewoon een symbool met de naam toe id
en er zullen geen duplicatieproblemen zijn. Bijvoorbeeld,
let person = ( name: "Jack" ); let id = Symbol("id"); person(id) = "Another value";
In het bovenstaande programma, zelfs als dezelfde naam wordt gebruikt om waarden op te slaan, zal het Symbol
datatype een unieke waarde hebben.
Als in het bovenstaande programma de string-sleutel werd gebruikt, zou het latere programma de waarde van de eigenschap hebben gewijzigd. Bijvoorbeeld,
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
In het bovenstaande programma user.id
overschrijft de tweede de vorige waarde.
Symbool methoden
Er zijn verschillende methoden beschikbaar met Symbol.
Methode | Omschrijving |
---|---|
for() | Zoekt naar bestaande symbolen |
keyFor() | Retourneert een gedeelde symboolsleutel uit het algemene symboolregister. |
toSource() | Retourneert een tekenreeks die de bron van het Symbol-object bevat |
toString() | Retourneert een tekenreeks met de beschrijving van het symbool |
valueOf() | Retourneert de primitieve waarde van het Symbol-object. |
Voorbeeld: symboolmethoden
// 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
Symbooleigenschappen
Eigendommen | Omschrijving |
---|---|
asyncIterator | Retourneert de standaard AsyncIterator voor een object |
hasInstance | Bepaalt of een constructorobject een object herkent als zijn instantie |
isConcatSpreadable | Geeft aan of een object moet worden afgevlakt tot zijn array-elementen |
iterator | Retourneert de standaard iterator voor een object |
match | Komt overeen met een string |
matchAll | Retourneert een iterator die overeenkomsten oplevert van de reguliere expressie voor een tekenreeks |
replace | Vervangt overeenkomende subtekenreeksen van een tekenreeks |
search | Retourneert de index binnen een tekenreeks die overeenkomt met de reguliere expressie |
split | Splitst een tekenreeks op de indices die overeenkomen met een reguliere expressie |
species | Maakt afgeleide objecten |
toPrimitive | Converteert een object naar een primitieve waarde |
toStringTag | Geeft de standaardbeschrijving van een object |
description | Retourneert een tekenreeks met de beschrijving van het symbool |
Voorbeeld: Voorbeeld van symbooleigenschappen
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))