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

String.prototype.valueOf()

Methode

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

seit JavaScript ES1 (Baseline: alle Browser) Kategorie: method-property

Signatur

String.prototype.valueOf()

Beschreibung

valueOf() gibt den primitiven Zeichenkettenwert zurück, der in einem String-Objekt steckt. Ruft man die Methode auf einem primitiven String auf, bekommt man denselben Wert unverändert zurück. Das Ergebnis ist dasselbe wie bei String.prototype.toString().

Selbst ruft man die Methode nur selten auf. JavaScript nutzt sie intern, wenn ein Objekt in einen primitiven Wert umgewandelt werden muss, etwa bei Vergleichen mit ==, bei der Verkettung mit + oder in Template-Literalen (dort über Symbol.toPrimitive bzw. toString()/valueOf()).

Wirklich nützlich ist valueOf(), wenn man einen per new String() erzeugten Wrapper wieder in einen echten primitiven String umwandeln will, damit typeof, strikte Gleichheit (===) und Map-/Set-Schlüssel wie erwartet funktionieren.

Rückgabewert

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

Beispiele

String-Objekt in einen primitiven Wert umwandeln

const wrapper = new String('Hallo');
const primitiv = wrapper.valueOf();

console.log(typeof wrapper);  // Objekt
console.log(typeof primitiv); // primitiver String
console.log(primitiv);
object string Hallo

Strikte Gleichheit mit String-Objekten richtig herstellen

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 Werte
console.log(a == 'abc');                  // implizites valueOf()
false true true

Werte vor der Nutzung als Set-Schlüssel normalisieren

const eingaben = [new String('rot'), 'rot', new String('blau')];

// Ohne Normalisierung wäre jedes Objekt ein eigener Eintrag
const farben = new Set(eingaben.map((s) => s.valueOf()));

console.log([...farben]);
[ 'rot', 'blau' ]

Aufruf auf primitivem String

const name = 'Ada';
console.log(name.valueOf() === name);
true

// Wichtig · Fallstricke

  • Fehler bei falschem this: Wird die Methode per call auf etwas aufgerufen, das kein String und kein String-Objekt ist, wirft sie einen TypeError, z. B. bei String.prototype.valueOf.call({}). Eine allgemeine Umwandlung wie bei String(wert) findet nicht statt.
  • Verzichte auf new String(). Wrapper-Objekte sind in bedingten Ausdrücken immer wahr (auch new String('')) und verhalten sich bei === und typeof anders als primitive Strings. Zum Umwandeln nimmst du besser String(wert) ohne new.
  • Das Ergebnis ist dasselbe wie bei toString(). Welche der beiden Methoden JavaScript bei der impliziten Umwandlung zuerst aufruft, hängt vom Kontext ab (Hinweis "string" oder "default").
  • Wird in allen Browsern und in Node.js unterstützt.