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

Boolean.prototype.valueOf()

Methode

Gibt den primitiven Wert (<code>true</code> oder <code>false</code>) eines <code>Boolean</code>-Objekts oder eines Boolean-Primitivs zurück.

seit JavaScript ES1 (Baseline: alle Browser, alle Node.js-Versione Kategorie: method-property

Signatur

Boolean.prototype.valueOf()

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

Typ
boolean
Beschreibung
Der primitive Wahrheitswert 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());
object false boolean

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');
}
Objekt ist truthy – obwohl false enthalten ist! 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));
[ true, false, false, true, true ]

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);
2 true false

// Wichtig · Fallstricke

  • Kein new Boolean() verwenden: Wrapper-Objekte sind immer truthy und bei === nie gleich einem Primitiv. Zum Umwandeln lieber Boolean(x) (ohne new) oder !!x nutzen.
  • Wird die Methode mit einem this aufgerufen, das weder ein Boolean-Primitiv noch ein Boolean-Objekt ist, wirft sie einen TypeError, z. B. bei Boolean.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.