TypeScript Symbol
Symbol ist ein primitiver Datentyp, der in ES6 eingeführt wurde und einen eindeutigen Bezeichner darstellt.
In TypeScript kann Symbol als Eigenschaftsschlüssel eines Objekts verwendet werden, wodurch die Eindeutigkeit von Eigenschaften gewährleistet wird.
Dies ist sehr nützlich in Szenarien wie dem Erstellen privater Eigenschaften und dem Vermeiden von Konflikten bei Eigenschaftsnamen.
SVG-Diagramm: Wie Symbol funktioniert
Warum brauchen wir Symbol?
In JavaScript sind die Eigenschaftsnamen von Objekten alle Zeichenketten, was manchmal zu Konflikten führen kann.
Symbol bietet eine Möglichkeit, eindeutige Bezeichner zu erstellen. Jeder Aufruf von Symbol() erzeugt einen neuen, eindeutigen Wert.
Dies ist sehr nützlich in Szenarien wie dem Erstellen privater Eigenschaften, dem Definieren eindeutiger Konstanten und dem Implementieren von Iteratoren.
Konzepterklärung:Symbol ist einer der primitiven Datentypen von JavaScript, erstellt über die Funktion Symbol(). Jeder Symbol-Wert ist eindeutig; selbst wenn ihre Beschreibungen identisch sind, sind sie nicht gleich.
Symbol erstellen
Verwenden Sie die Funktion Symbol(), um einen eindeutigen Symbol-Wert zu erstellen.
Beispiel
var sym1 = Symbol("description");
var sym2 = Symbol("description");
// Jedes erzeugte Symbol ist eindeutig, auch wenn die Beschreibungen gleich sind
console.log("sym1 === sym2: " + (sym1 === sym2));
console.log("sym1: " + sym1.toString());
Ausgabe:
sym1 === sym2: false sym1: Symbol(description)
Eindeutigkeit:Dies ist das wichtigste Merkmal von Symbol. Jeder Aufruf von Symbol() erzeugt einen neuen Wert, der keinem anderen Wert gleich ist.
Symbol als Objekteigenschaft
Symbol kann als Eigenschaftsschlüssel eines Objekts verwendet werden, um einen eindeutigen Eigenschaftsnamen zu erstellen.
Beispiel
var sym = Symbol("key");
// Symbol als Eigenschaftsschlüssel des Objekts verwenden
var obj = {
name: "Alice", // Gewöhnliche String-Eigenschaft
[sym]: "geheimer Wert" // Symbol-Eigenschaft, berechneter Eigenschaftsname
};
// Zugriff auf die gewöhnliche Eigenschaft
console.log("Gewöhnliche Eigenschaft: " + obj.name);
// Zugriff auf die Symbol-Eigenschaft
console.log("Symbol-Eigenschaft: " + obj[sym]);
// Symbol-Eigenschaften erscheinen nicht in JSON
console.log("Object: " + JSON.stringify(obj));
Ausgabe:
普通属性: Alice
Symbol 属性: secret value
对象: {"name":"Alice"}
Privatsphäre:Symbol-Eigenschaften erscheinen nicht in der JSON-Serialisierung und werden auch nicht von for...in durchlaufen, sodass sie verwendet werden können, um 'private' Eigenschaften zu erstellen.
Globale Symbol-Registrierung
Verwenden Sie Symbol.for(), um auf Symbole in der globalen Registrierung zuzugreifen. Derselbe Schlüssel gibt dasselbe Symbol zurück.
Beispiel
// Wenn der Schlüssel nicht existiert, wird ein neuer erstellt; wenn er bereits existiert, wird der vorhandene zurückgegeben
var globalSym1 = Symbol.for("global");
var globalSym2 = Symbol.for("global");
// Symbole mit demselben Schlüssel sind gleich
console.log("Globale Symbole gleich: " + (globalSym1 === globalSym2));
// Den Schlüssel des Symbols abrufen
console.log("Symbolschlüssel: " + Symbol.keyFor(globalSym1));
Ausgabe:
全局 Symbol 相等: true Symbol key: global
Unterschied:Symbol() erzeugt jedes Mal einen neuen Wert, während Symbol.for() im globalen Register nachschlägt oder einen erstellt.
Eingebaute Symbole
JavaScript definiert einige eingebaute Symbolwerte, um das Sprachverhalten anzupassen.
Beispiel
var arr = [1, 2, 3];
// Den Iterator eines Arrays abrufen
var iterator = arr[Symbol.iterator]();
// Mit dem Iterator durchlaufen
console.log("Erstes Element: " + iterator.next().value);
console.log("Zweites Element: " + iterator.next().value);
// Symbol.toStringTag passt den Rückgabewert der toString()-Methode eines Objekts an
var obj = {
[Symbol.toStringTag]: "MyObject"
};
console.log("Objekttyp: " + obj.toString());
Ausgabe:
第一个元素: 1 第二个元素: 2 Object type: [object MyObject]
Wichtig:Eingebaute Symbole werden verwendet, um das Sprachverhalten anzupassen, wie Iteratoren und Typkonvertierungen, und sind die Grundlage der fortgeschrittenen Funktionen von JavaScript.
Symbol-Typannotation
Verwenden Sie den Typ Symbol für die Typannotation in TypeScript.
Beispiel
var sym: symbol = Symbol("key");
// Der Schlüsseltyp des Objekts ist symbol, und sein Werttyp ist string
var obj: { [key: symbol]: string } = {};
// Symbol als Schlüssel verwenden
obj[sym] = "value";
console.log("Symbol-Eigenschaftswert: " + obj[sym]);
Typ:In TypeScript,
symbolSymbol-Werte mit Typannotation versehen.
Hinweise
- Eindeutigkeit:Der Wert jedes Symbol()-Aufrufs ist unterschiedlich
- Nicht aufzählbar:Symbol-Eigenschaften erscheinen nicht in for...in-Schleifen
- JSON ignoriert:Symbol-Eigenschaften werden nicht von JSON serialisiert
- Globale Registrierung:Symbol.for() wird in der globalen Registrierung geteilt
Anwendungsfälle:Symbol wird oft verwendet, um private Eigenschaften von Objekten zu erstellen, eindeutige Konstanten zu definieren, Namenskonflikte bei Eigenschaften zu vermeiden usw.
Zusammenfassung
Symbol ist ein wichtiger primitiver Typ in TypeScript.
- Eindeutigkeit:Jedes erzeugte Symbol ist nicht gleich anderen
- Eigenschaftsschlüssel:Kann als eindeutiger Eigenschaftsschlüssel für Objekte verwendet werden
- Globale Registrierung:Symbol.for() erstellt/ruft globale Symbole ab
- Eingebaute Symbole:Symbol.iterator, Symbol.toStringTag, usw.
- Typannotation:Verwenden Sie den Typ symbol
Andere ErweiterungenEmpfehlung:Verwenden Sie Symbol, wenn Sie eindeutige Bezeichner erstellen, Eigenschaftsnamenkonflikte vermeiden oder 'private' Eigenschaften benötigen.