Start · Sprachen · JavaScript · Referenz · String.prototype.toString()

String.prototype.toString()

Methode

Gibt den primitiven Zeichenkettenwert eines Strings bzw. <code>String</code>-Objekts zurück.

seit JavaScript ES1 – Baseline: alle Browser Kategorie: method-property

Signatur

String.prototype.toString()

Beschreibung

Die Methode toString() von String-Werten gibt den zugrunde liegenden primitiven Zeichenkettenwert zurück. Bei einem String-Primitiv kommt einfach derselbe Wert zurück. Bei einem String-Objekt, also einem Objekt aus new String("…"), kommt der eingepackte primitive String zurück. Damit verhält sie sich genauso wie String.prototype.valueOf().

String.prototype überschreibt Object.prototype.toString(). Deshalb liefert ein String-Objekt nicht "[object String]", sondern seinen eigentlichen Text. JavaScript ruft die Methode meist selbst auf, zum Beispiel bei der Umwandlung in einen String in Template-Literalen oder bei der Verkettung mit +.

Direkt aufrufen muss man sie selten. Nützlich ist sie vor allem, um ein String-Objekt ausdrücklich wieder in einen primitiven String zu verwandeln, damit strikte Vergleiche mit === und typeof-Prüfungen wie erwartet funktionieren.

Rückgabewert

Typ
string
Beschreibung
Der primitive Zeichenkettenwert des Strings bzw. String-Objekts.

Beispiele

Primitiv und String-Objekt

const primitiv = "Hallo";
const objekt = new String("Hallo");

console.log(primitiv.toString());
console.log(typeof objekt);
console.log(typeof objekt.toString());
Hallo object string

Strikter Vergleich mit String-Objekten

const a = new String("abc");
const b = "abc";

console.log(a === b);            // Objekt vs. Primitiv
console.log(a.toString() === b); // beide primitiv
false true

Unterschied zu Object.prototype.toString

const s = new String("Text");

console.log(s.toString());
console.log(Object.prototype.toString.call(s));
Text [object String]

TypeError bei falschem this-Wert

try {
  String.prototype.toString.call({ text: "kein String" });
} catch (err) {
  console.log(err instanceof TypeError);
}
true

// Wichtig · Fallstricke

  • Nicht generisch: Ist this weder ein String-Primitiv noch ein String-Objekt, wirft die Methode einen TypeError. Für beliebige Werte nimmt man besser String(wert) oder ein Template-Literal.
  • Kein Schutz vor null/undefined: wert.toString() wirft einen Fehler, wenn wert null oder undefined ist. String(wert) liefert dagegen "null" bzw. "undefined".
  • Kein Einfluss auf die automatische Umwandlung: Bei der impliziten Umwandlung in einen String wird zuerst Symbol.toPrimitive geprüft. String.prototype besitzt diese Methode nicht, daher wird danach toString() aufgerufen. Wer String.prototype.toString überschreibt, verändert also zum Beispiel die Ausgabe von Template-Literalen für String-Objekte. Davon ist dringend abzuraten.
  • new String() vermeiden: String-Objekte sind fast nie nötig. Sie führen leicht zu Fehlern bei ===, typeof und Wahrheitswerten: new String("") ist truthy.
  • Die Methode wird in allen Browsern und in Node.js vollständig unterstützt.