JavaScript-Symbol (mit Beispielen)

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… inSchleife 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 Symbolsim 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 personObjekt 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 Symbolerstellen 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, idund 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 SymbolDatentyp 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))

Interessante Beiträge...