Symbol.prototype.toString()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2015.

Die toString() Methode von Symbol Werten gibt einen Zeichenfolgenausdruck dieses Symbolwertes zurück.

Probieren Sie es aus

Syntax

js
toString()

Parameter

Keine.

Rückgabewert

Eine Zeichenfolge, die den angegebenen Symbolwert repräsentiert.

Beschreibung

Das Symbol Objekt überschreibt die toString Methode von Object; es erbt nicht von Object.prototype.toString(). Für Symbol Werte gibt die toString Methode eine beschreibende Zeichenfolge in der Form "Symbol(description)" zurück, wobei description die Beschreibung des Symbols ist.

Die toString() Methode erfordert, dass ihr this-Wert ein Symbol-Primitiv oder Wrapper-Objekt ist. Sie löst einen TypeError für andere this-Werte aus, ohne zu versuchen, sie in Symbolwerte zu zwingen.

Da Symbol eine [Symbol.toPrimitive]() Methode hat, hat diese Methode immer Vorrang vor toString(), wenn ein Symbol-Objekt in eine Zeichenfolge umgewandelt wird. Da jedoch Symbol.prototype[Symbol.toPrimitive]() ein Symbol-Primärwert zurückgibt, und Symbol-Primärwerte einen TypeError auslösen, wenn sie implizit in eine Zeichenfolge konvertiert werden, wird die toString() Methode niemals implizit von der Sprache aufgerufen. Um ein Symbol in eine Zeichenfolge umzuwandeln, müssen Sie seine toString() Methode explizit aufrufen oder die String() Funktion verwenden.

Beispiele

Verwendung von toString()

js
Symbol("desc").toString(); // "Symbol(desc)"

// well-known symbols
Symbol.iterator.toString(); // "Symbol(Symbol.iterator)"

// global symbols
Symbol.for("foo").toString(); // "Symbol(foo)"

Implizites Aufrufen von toString()

Die einzige Möglichkeit, JavaScript dazu zu bringen, toString() anstelle von [Symbol.toPrimitive]() auf einem Symbol-Wrapper-Objekt implizit aufzurufen, besteht darin, zuerst die [Symbol.toPrimitive]() Methode zu löschen.

Warnung: Sie sollten dies in der Praxis nicht tun. Verändern Sie niemals eingebaute Objekte, es sei denn, Sie wissen genau, was Sie tun.

js
delete Symbol.prototype[Symbol.toPrimitive];
console.log(`${Object(Symbol("foo"))}`); // "Symbol(foo)"

Spezifikationen

Specification
ECMAScript Language Specification
# sec-symbol.prototype.tostring

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch