Signatur
Beschreibung
valueOf() liefert den im internen Slot [[BooleanData]] gespeicherten primitiven Wahrheitswert eines Boolean-Objekts. Wird die Methode auf einem Primitiv wie true aufgerufen, verpackt JavaScript den Wert kurzzeitig in ein Wrapper-Objekt (Autoboxing). Zurück kommt dann einfach derselbe primitive Wert.
Normalerweise ruft man die Methode nicht selbst auf: Die JavaScript-Engine nutzt sie intern, wenn ein Objekt in ein Primitiv umgewandelt werden muss, etwa bei arithmetischen Operationen oder beim losen Vergleich mit ==. Nützlich ist ein direkter Aufruf vor allem dann, wenn man es mit einem (meist versehentlich) per new Boolean() erzeugten Wrapper-Objekt zu tun hat und den echten Wahrheitswert braucht.
Wichtig: Ein Boolean-Objekt ist als Objekt immer truthy, auch wenn es false enthält. Wer den enthaltenen Wert in Bedingungen verwenden will, muss ihn vorher mit valueOf() auspacken.
Rückgabewert
true oder false des Boolean-Objekts bzw. -Primitivs.Beispiele
Primitiven Wert aus einem Wrapper-Objekt holen
const wrapped = new Boolean(false);
console.log(typeof wrapped); // Objekt
console.log(wrapped.valueOf()); // primitiver Wert
console.log(typeof wrapped.valueOf());
Truthy-Falle bei new Boolean(false) umgehen
const flag = new Boolean(false);
if (flag) {
console.log('Objekt ist truthy – obwohl false enthalten ist!');
}
if (!flag.valueOf()) {
console.log('Ausgepackter Wert ist korrekt false');
}
Werte normalisieren, die primitiv oder verpackt sein können
const toPrimitiveBool = (value) =>
value instanceof Boolean ? value.valueOf() : Boolean(value);
const inputs = [true, new Boolean(false), 0, 'ja', new Boolean(true)];
console.log(inputs.map(toPrimitiveBool));
Impliziter Aufruf bei Umwandlung in eine Zahl
const yes = new Boolean(true);
// Arithmetik ruft intern valueOf() auf
console.log(yes + 1);
console.log(new Boolean(false) == false);
console.log(new Boolean(false) === false);
// Wichtig · Fallstricke
- Kein
new Boolean()verwenden: Wrapper-Objekte sind immer truthy und bei===nie gleich einem Primitiv. Zum Umwandeln lieberBoolean(x)(ohnenew) oder!!xnutzen. - Wird die Methode mit einem
thisaufgerufen, das weder ein Boolean-Primitiv noch einBoolean-Objekt ist, wirft sie einenTypeError, z. B. beiBoolean.prototype.valueOf.call('true'). - Den Rückgabewert von
valueOf()kann man auf Primitiven gefahrlos aufrufen, es passiert aber nichts Nützliches:true.valueOf() === true. - Kompatibilität: seit ECMAScript 1 in allen Browsern und in Node.js verfügbar.