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 String zurück, der diesen Symbolwert repräsentiert.

Probieren Sie es aus

console.log(Symbol("desc").toString());
// Expected output: "Symbol(desc)"

console.log(Symbol.iterator.toString());
// Expected output: "Symbol(Symbol.iterator)

console.log(Symbol.for("foo").toString());
// Expected output: "Symbol(foo)"

// console.log(Symbol('foo') + 'bar');
// Expected output: Error: Can't convert symbol to string

Syntax

js
toString()

Parameter

Keine.

Rückgabewert

Ein String, der den angegebenen Symbolwert darstellt.

Beschreibung

Das Symbol-Objekt überschreibt die toString-Methode von Object; es erbt nicht Object.prototype.toString(). Für Symbol-Werte gibt die toString-Methode einen beschreibenden String 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 ein Wrapper-Objekt ist. Für andere this-Werte wird ein TypeError ausgelöst, ohne zu versuchen, sie zu Symbolwerten zu konvertieren.

Da Symbol über eine [Symbol.toPrimitive]()-Methode verfügt, hat diese Methode stets Vorrang vor toString(), wenn ein Symbol-Objekt in einen String umgewandelt wird. Allerdings gibt Symbol.prototype[Symbol.toPrimitive]() ein Symbol-Primitiv zurück, und Symbol-Primitiven lösen einen TypeError aus, wenn sie implizit in einen String umgewandelt werden. Deshalb wird die toString()-Methode niemals implizit von der Sprache aufgerufen. Um ein Symbol zu stringifizieren, müssen Sie explizit seine toString()-Methode verwenden oder die String()-Funktion nutzen.

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() statt [Symbol.toPrimitive]() für ein Symbol-Wrapper-Objekt implizit aufzurufen, besteht darin, die [Symbol.toPrimitive]()-Methode zuerst zu löschen.

Warnung: Dies sollten Sie in der Praxis nicht tun. Verändern Sie niemals integrierte 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® 2025 Language Specification
# sec-symbol.prototype.tostring

Browser-Kompatibilität

Siehe auch