Signatur
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
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());
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
Unterschied zu Object.prototype.toString
const s = new String("Text");
console.log(s.toString());
console.log(Object.prototype.toString.call(s));
TypeError bei falschem this-Wert
try {
String.prototype.toString.call({ text: "kein String" });
} catch (err) {
console.log(err instanceof TypeError);
}
// Wichtig · Fallstricke
- Nicht generisch: Ist
thisweder ein String-Primitiv noch einString-Objekt, wirft die Methode einenTypeError. Für beliebige Werte nimmt man besserString(wert)oder ein Template-Literal. - Kein Schutz vor
null/undefined:wert.toString()wirft einen Fehler, wennwertnulloderundefinedist.String(wert)liefert dagegen"null"bzw."undefined". - Kein Einfluss auf die automatische Umwandlung: Bei der impliziten Umwandlung in einen String wird zuerst
Symbol.toPrimitivegeprüft.String.prototypebesitzt diese Methode nicht, daher wird danachtoString()aufgerufen. WerString.prototype.toStringüberschreibt, verändert also zum Beispiel die Ausgabe von Template-Literalen fürString-Objekte. Davon ist dringend abzuraten. new String()vermeiden: String-Objekte sind fast nie nötig. Sie führen leicht zu Fehlern bei===,typeofund Wahrheitswerten:new String("")ist truthy.- Die Methode wird in allen Browsern und in Node.js vollständig unterstützt.