In diesem Tutorial lernen Sie anhand von Beispielen das JavaScript-Symbol kennen.
JavaScript-Symbol
Mit JavaScript ES6 wurde ein neuer primitiver Datentyp namens eingeführt Symbol
. Symbole sind unveränderlich (können nicht geändert werden) und sind eindeutig. Beispielsweise,
// two symbols with the same description const value1 = Symbol('hello'); const value2 = Symbol('hello'); console.log(value1 === value2); // false
Obwohl value1 und value2 beide dieselbe Beschreibung enthalten, sind sie unterschiedlich.
Symbol erstellen
Mit der Symbol()
Funktion erstellen Sie eine Symbol
. Beispielsweise,
// creating symbol const x = Symbol() typeof x; // symbol
Sie können eine optionale Zeichenfolge als Beschreibung übergeben. Beispielsweise,
const x = Symbol('hey'); console.log(x); // Symbol(hey)
Zugriffssymbol Beschreibung
Um auf die Beschreibung eines Symbols zuzugreifen, verwenden wir den .
Operator. Beispielsweise,
const x = Symbol('hey'); console.log(x.description); // hey
Symbol als Objektschlüssel hinzufügen
Sie können Symbole in eckigen Klammern als Schlüssel in ein Objekt einfügen ()
. Beispielsweise,
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)
Symbole sind in for… in Loop nicht enthalten
Die for… in
Schleife iteriert nicht über symbolische Eigenschaften. Beispielsweise,
let id = Symbol("id"); let person = ( name: "Jack", age: 25, (id): 12 ); // using for… in for (let key in person) ( console.log(key); )
Ausgabe
name Alter
Vorteil der Verwendung von Symbolen im Objekt
Wenn dasselbe Code-Snippet in verschiedenen Programmen verwendet wird, ist es besser, es Symbols
im Objektschlüssel zu verwenden. Dies liegt daran, dass Sie denselben Schlüsselnamen in verschiedenen Codes verwenden und Doppelprobleme vermeiden können. Beispielsweise,
let person = ( name: "Jack" ); // creating Symbol let id = Symbol("id"); // adding symbol as a key person(id) = 12;
Wenn das person
Objekt im obigen Programm auch von einem anderen Programm verwendet wird, möchten Sie keine Eigenschaft hinzufügen, auf die ein anderes Programm zugreifen oder die von einem anderen Programm geändert werden kann. Mit Symbol
erstellen Sie daher eine eindeutige Eigenschaft, die Sie verwenden können.
Wenn das andere Programm nun auch eine Eigenschaft mit dem Namen id verwenden muss , fügen Sie einfach ein Symbol mit dem Namen hinzu, id
und es treten keine Probleme beim Duplizieren auf. Beispielsweise,
let person = ( name: "Jack" ); let id = Symbol("id"); person(id) = "Another value";
Selbst wenn im obigen Programm derselbe Name zum Speichern von Werten verwendet wird, hat der Symbol
Datentyp einen eindeutigen Wert.
Wenn im obigen Programm der Zeichenfolgenschlüssel verwendet worden wäre, hätte das spätere Programm den Wert der Eigenschaft geändert. Beispielsweise,
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
Im obigen Programm user.id
überschreibt der zweite den vorherigen Wert.
Symbolmethoden
Mit Symbol stehen verschiedene Methoden zur Verfügung.
Methode | Beschreibung |
---|---|
for() | Sucht nach vorhandenen Symbolen |
keyFor() | Gibt einen gemeinsam genutzten Symbolschlüssel aus der globalen Symbolregistrierung zurück. |
toSource() | Gibt eine Zeichenfolge zurück, die die Quelle des Symbol-Objekts enthält |
toString() | Gibt eine Zeichenfolge zurück, die die Beschreibung des Symbols enthält |
valueOf() | Gibt den Grundwert des Symbolobjekts zurück. |
Beispiel: Symbolmethoden
// 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
Symboleigenschaften
Eigenschaften | Beschreibung |
---|---|
asyncIterator | Gibt den Standard-AsyncIterator für ein Objekt zurück |
hasInstance | Bestimmt, ob ein Konstruktorobjekt ein Objekt als seine Instanz erkennt |
isConcatSpreadable | Gibt an, ob ein Objekt auf seine Array-Elemente reduziert werden soll |
iterator | Gibt den Standarditerator für ein Objekt zurück |
match | Stimmt mit einer Zeichenfolge überein |
matchAll | Gibt einen Iterator zurück, der Übereinstimmungen des regulären Ausdrucks mit einer Zeichenfolge liefert |
replace | Ersetzt übereinstimmende Teilzeichenfolgen einer Zeichenfolge |
search | Gibt den Index innerhalb einer Zeichenfolge zurück, die dem regulären Ausdruck entspricht |
split | Teilt eine Zeichenfolge an den Indizes, die einem regulären Ausdruck entsprechen |
species | Erstellt abgeleitete Objekte |
toPrimitive | Konvertiert ein Objekt in einen primitiven Wert |
toStringTag | Gibt die Standardbeschreibung eines Objekts an |
description | Gibt eine Zeichenfolge zurück, die die Beschreibung des Symbols enthält |
Beispiel: Symbol Eigenschaften Beispiel
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))