Signatur
Beschreibung
Mit new String(value) entsteht ein String-Objekt, also eine Objekt-Hülle um einen primitiven String. typeof liefert dafür "object" und nicht "string". Das Objekt hat alle String-Methoden, eine length-Eigenschaft und indizierte Zeichen. Wie jedes Objekt kann es zusätzlich eigene Eigenschaften speichern.
Ruft man String(value) ohne new als Funktion auf, erhält man einen primitiven String. Das ist in der Praxis fast immer gewünscht: So wandelt man beliebige Werte sicher in Text um. Anders als value.toString() funktioniert das auch mit null und undefined, und anders als die Verkettung mit "" auch mit Symbolen.
String-Objekte braucht man selten. Primitive Strings bekommen beim Methodenaufruf automatisch eine temporäre Hülle (Autoboxing). new String() sieht man deshalb fast nur in Lehrbeispielen, in altem Code oder wenn man bewusst ein eigenes Objekt mit Identität braucht.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $value | any | "" (leerer String) | Beliebiger Wert, der in einen String umgewandelt wird. Objekte werden über Symbol.toPrimitive, toString() bzw. valueOf() umgewandelt. Ein Symbol führt mit new zu einem TypeError, als reiner Funktionsaufruf String(sym) ist es erlaubt. |
Rückgabewert
new: ein String-Objekt, dessen valueOf() den primitiven Wert liefert. Ohne new: ein primitiver string.Beispiele
Objekt und primitiver String im Vergleich
const obj = new String('Hallo');
const prim = String('Hallo');
console.log(typeof obj); // Objekt-Hülle
console.log(typeof prim); // primitiver Wert
console.log(obj == prim); // lockerer Vergleich wandelt um
console.log(obj === prim); // strikter Vergleich: unterschiedliche Typen
console.log(obj.valueOf() === prim);
console.log(obj.length, obj[1]);
Sichere Umwandlung beliebiger Werte mit String() ohne new
const werte = [42, null, undefined, true, [1, 2], { a: 1 }, Symbol('id')];
const texte = werte.map((v) => String(v));
console.log(texte);
// Zum Vergleich: null.toString() würde einen TypeError werfen
Falle: String-Objekte sind immer truthy und untereinander nie gleich
const leer = new String('');
if (leer) {
console.log('Wird ausgeführt – das Objekt ist truthy!');
}
const a = new String('abc');
const b = new String('abc');
console.log(a === b); // zwei verschiedene Objekte
console.log(a.valueOf() === b.valueOf()); // Vergleich der primitiven Werte
Symbol mit new String() vs. String()
const sym = Symbol('token');
console.log(String(sym));
try {
new String(sym);
} catch (err) {
console.log(err.constructor.name, err.message);
}
// Wichtig · Fallstricke
new String()vermeiden: String-Objekte sind immer truthy, auchnew String(''). Zwei gleich lautende Objekte sind mit===nie gleich, undtypeofliefert"object". Das führt leicht zu schwer auffindbaren Fehlern. Linter wie ESLint warnen davor mit der Regelno-new-wrappers.- Für die Umwandlung in Text
String(value)oder Template-Literale verwenden.value.toString()wirft beinullundundefinedeinen Fehler,'' + valueund`${value}`werfen bei Symbolen einenTypeError. - Ob etwas ein String ist (primitiv oder Objekt), prüft man zuverlässig mit
typeof x === 'string' || x instanceof String. Über Realm-Grenzen hinweg, etwa zwischen iframes, funktioniertObject.prototype.toString.call(x) === '[object String]'. - Die Fehlermeldung bei Symbolen ist je nach Engine anders formuliert. Das Beispiel zeigt die Meldung von V8.
- Der Konstruktor ist in allen Browsern und in Node.js verfügbar.