Start · Sprachen · JavaScript · Referenz · Boolean

Boolean

Klasse

Das <code>Boolean</code>-Objekt repräsentiert einen Wahrheitswert: <code>true</code> oder <code>false</code>.

seit JavaScript ES1 Kategorie: core

Signatur

Boolean(value)

Beschreibung

Boolean-Werte können einen von zwei Werten annehmen: true oder false und repräsentieren den Wahrheitswert einer logischen Aussage.

Boolean-Werte werden typischerweise von relationalen Operatoren, Gleichheitsoperatoren und dem logischen NICHT (!) erzeugt. Sie können auch von Funktionen erzeugt werden, die Bedingungen darstellen, wie zum Beispiel Array.isArray(). Beachte, dass binäre logische Operatoren wie && und || die Werte der Operanden zurückgeben, die möglicherweise keine Boolean-Werte sind.

Boolean-Werte werden typischerweise für bedingte Prüfungen verwendet, wie etwa als Bedingung für if...else- und while-Anweisungen, den bedingten Operator (? :) oder als Rückgabewert des Prädikats von Array.prototype.filter().

Du musst nur selten explizit etwas in einen Boolean-Wert umwandeln, da JavaScript dies in Boolean-Kontexten automatisch tut. Du kannst also jeden Wert so verwenden, als wäre er ein Boolean, basierend auf seiner truthiness. Es wird auch empfohlen, in eigenem Code if (condition) und if (!condition) anstelle von if (condition === true) oder if (condition === false) zu verwenden, um diese Konvention zu nutzen. Sicherzustellen, dass Werte, die Bedingungen darstellen, immer Booleans sind, kann jedoch dazu beitragen, die Absicht deines Codes zu verdeutlichen.

Boolean-Primitives und Boolean-Objekte

Um Nicht-Boolean-Werte in Boolean umzuwandeln, verwende Boolean als Funktion oder den doppelten NICHT-Operator. Verwende den Boolean()-Konstruktor nicht mit new.

Der Grund ist, dass alle Objekte, einschließlich eines Boolean-Objekts, dessen umschlossener Wert false ist, truthy sind und an Stellen wie in bedingten Anweisungen zu true ausgewertet werden. (Siehe auch den Abschnitt zur Boolean-Coercion weiter unten.)

Boolean-Coercion

Viele eingebaute Operationen, die Booleans erwarten, wandeln ihre Argumente zunächst in Booleans um. Die Operation kann wie folgt zusammengefasst werden:

  • Booleans werden unverändert zurückgegeben.
  • undefined wird zu false.
  • null wird zu false.
  • 0, -0 und NaN werden zu false; andere Zahlen werden zu true.
  • 0n wird zu false; andere BigInts werden zu true.
  • Der leere String "" wird zu false; andere Strings werden zu true.
  • Symbols werden zu true.
  • Alle Objekte werden zu true.

Mit anderen Worten, es gibt nur eine Handvoll Werte, die zu false umgewandelt werden – diese werden falsy-Werte genannt. Alle anderen Werte werden truthy-Werte genannt. Die Truthiness eines Wertes ist wichtig, wenn er mit logischen Operatoren, bedingten Anweisungen oder in einem beliebigen Boolean-Kontext verwendet wird.

Es gibt zwei Möglichkeiten, denselben Effekt in JavaScript zu erreichen:

  • Double NOT: !!x negiert x zweimal, was x mit demselben Algorithmus wie oben in einen Boolean umwandelt.
  • Die Boolean()-Funktion: Boolean(x) verwendet denselben Algorithmus wie oben, um x umzuwandeln.

Beachte, dass Truthiness nicht dasselbe ist wie loose equal zu true oder false zu sein.

[] ist truthy, aber es ist auch loosely equal zu false. Es ist truthy, weil alle Objekte truthy sind. Beim Vergleich mit false, einem Primitive, wird [] jedoch ebenfalls zu einem Primitive umgewandelt, nämlich "" über Array.prototype.toString(). Der Vergleich von Strings und Booleans führt dazu, dass beide in Zahlen umgewandelt werden, und beide werden zu 0, sodass [] == false zu true wird. Allgemein unterscheiden sich Falsiness und == false in folgenden Fällen:

  • NaN, undefined und null sind falsy, aber nicht loosely equal zu false.
  • "0" (und andere String-Literale, die nicht "" sind, aber zu 0 umgewandelt werden) ist truthy, aber loosely equal zu false.
  • Objekte sind immer truthy, aber ihre primitive Darstellung kann loosely equal zu false sein.

Bei truthy-Werten ist es noch unwahrscheinlicher, dass sie loosely equal zu true sind. Alle Werte sind entweder truthy oder falsy, aber die meisten Werte sind weder loosely equal zu true noch zu false.

Konstruktor

  • Boolean(): Erstellt Boolean-Objekte. Wenn als Funktion aufgerufen, gibt er primitive Werte vom Typ Boolean zurück.

Instanz-Eigenschaften

Diese Eigenschaften sind auf Boolean.prototype definiert und werden von allen Boolean-Instanzen geteilt.

  • Boolean.prototype.constructor: Die Konstruktorfunktion, die das Instanzobjekt erzeugt hat. Für Boolean-Instanzen ist der initiale Wert der Boolean-Konstruktor.

Instanz-Methoden

  • Boolean.prototype.toString(): Gibt je nach Wert des Objekts einen String true oder false zurück. Überschreibt die Methode Object.prototype.toString().
  • Boolean.prototype.valueOf(): Gibt den primitiven Wert des Boolean-Objekts zurück. Überschreibt die Methode Object.prototype.valueOf().

Parameter

Name Typ Default Beschreibung
$value any false Der Ausgangswert, der in einen booleschen Wert umgewandelt werden soll. Wird Boolean() als Funktion (ohne new) aufgerufen, liefert sie den primitiven boolean. Wird new Boolean(value) verwendet, entsteht ein Wrapper-Objekt.

Rückgabewert

Typ
boolean | Boolean
Beschreibung
Als Funktion aufgerufen (Boolean(value)) gibt sie den primitiven Wert true oder false zurück. Als Konstruktor aufgerufen (new Boolean(value)) gibt sie ein Boolean-Wrapper-Objekt zurück.

Beispiele

Empfohlene Verwendung

// Do this:
// This always returns a boolean value
const isObject = (obj) => !!obj && typeof obj === "object";

// Or this:
const isObject = (obj) => Boolean(obj) && typeof obj === "object";

// Or this:
const isObject = (obj) => obj !== null && typeof obj === "object";

// Instead of this:
// This may return falsy values that are not equal to false
const isObject = (obj) => obj && typeof obj === "object";

Boolean als Funktion statt Konstruktor

const good = Boolean(expression);
const good2 = !!expression;

Nicht als Konstruktor verwenden

const bad = new Boolean(expression); // don't use this!

Boolean-Objekte sind immer truthy

if (new Boolean(true)) {
  console.log("This log is printed.");
}

if (new Boolean(false)) {
  console.log("This log is ALSO printed.");
}

const myFalse = new Boolean(false); // myFalse is a Boolean object (not the primitive value false)
const g = Boolean(myFalse); // g is true
const myString = new String("Hello"); // myString is a String object
const s = Boolean(myString); // s is true

Truthiness vs. loose equality

if ([]) {
  console.log("[] is truthy");
}
if ([] == false) {
  console.log("[] == false");
}
// [] is truthy
// [] == false

false-Werte erzeugen

const bNoParam = Boolean();
const bZero = Boolean(0);
const bNull = Boolean(null);
const bEmptyString = Boolean("");
const bfalse = Boolean(false);

true-Werte erzeugen

const btrue = Boolean(true);
const btrueString = Boolean("true");
const bfalseString = Boolean("false");
const bSuLin = Boolean("Su Lin");
const bArrayProto = Boolean([]);
const bObjProto = Boolean({});

// Wichtig · Fallstricke

Ein Legacy-Verhalten führt dazu, dass document.all bei Verwendung als Boolean false zurückgibt, obwohl es ein Objekt ist. Diese Eigenschaft ist Legacy und nicht standardisiert und sollte nicht verwendet werden. Anders als andere Typumwandlungen wie String- oder Number-Coercion versucht die Boolean-Coercion nicht, Objekte durch Aufruf benutzerdefinierter Methoden in Primitives umzuwandeln. Warnung: Du solltest Boolean nur selten als Konstruktor verwenden.