JavaScript/Objekte/Boolean

Aus SELFHTML-Wiki
Wechseln zu: Navigation, Suche

Unter dem Begriff Boolean versteht man in JavaScript dreierlei - zum einen den primitiven Datentyp für boolesche Werte, zum zweiten eine Funktion, die beliebige Werte zum primitiven Boolean-Typ konvertiert und zum dritten ein vordefiniertes Objekt, das dazu da ist, primitive boolesche Werte als Objekt zu kapseln. Diese Bedeutungen müssen genau unterschieden werden.

Der JavaScript-Programmierer verwendet im Normalfall immer den primitiven Datentyp. Die Konstanten true und false sind primitive Werte, keine Objekte, und der ! Operator (not) liefert ebenfalls den primitiven Wert. Die Rückgabe der Boolean() Funktion ist ebenfalls ein primitiver Wert.

Das Boolean-Objekt existiert in JavaScript als Helfer, um primitive Boolean-Werte wie Objekte behandeln zu können. Eine Beschreibung dazu findet sich weiter unten.

Boolesche Werte[Bearbeiten]

Der Begriff geht auf den britischen Mathematiker George Boole zurück, der sich mit Logik und Logikoperationen beschäftigt hat. Ein boolescher Wert ist entweder wahr oder falsch, in JavaScript dargestellt durch die eingebauten Konstanten true und false.

Boole'sche Werte finden Verwendung bei der Steuerung des Programmablaufes. Sie können durch logische Operatoren miteinander verknüpft werden, deren Ergebnis dann wieder Boole'sche Werte sind.

Was ist Wahrheit?[Bearbeiten]

Um das Verhalten von JavaScript im Umgang mit Boole'schen Werten und logischen Operatoren zu verstehen, muss man wissen, dass Javascript nicht nur true und false als wahr und falsch interpretiert. Einige bestimmte Werte gelten als "falsch-artig", oder "falsy", nämlich

  • false
  • undefined
  • null
  • 0
  • ""

Alle Werte, die nicht falsy sind, gelten als "wahr-artig", oder "truthy". Sämtliche Objekte, also auch Funktionen oder Arrays sind truthy. JavaScript nimmt es dabei sehr genau. Objekte ohne Eigenschaften oder Arrays mit Länge 0 sind truthy. "" und null sind falsy, aber " " und "null" sind truthy.

Allgemeines zur Verwendung[Bearbeiten]

Einen primitiven Wert vom Typ Boolean erhält man durch Verwendung der vordefinierten Konstanten true und false, oder man kann durch Verwendung der Funktion Boolean() jeden beliebigen Wert konvertieren. Übergibt man ihr einen der falsy-Werte, erhält man false, sonst true.

Beispiel: Erzeugen von Boole'schen Werten
wahr     = true;
auchWahr = Boolean("irgendwas");
stimmt   = Boolean(4711);
prima    = Boolean(true);

falsch   = false;
verkehrt = Boolean(0);
nix      = Boolean(null)
garNix   = Boolean();     // Kein Argument bedeutet, dass der Parameter den Wert undefined hat
nicht    = Boolean("");
fehler   = Boolean(false);

// Achtung!
boeseFalle = new Boolean(false);
if (boeseFalle)
   alert("Autsch!");

JavaScript nimmt es wirklich sehr genau. Es ist ein Unterschied, ob man Boolean(bla) oder new Boolean(dings) verwendet. Ersteres ist ein Funktionsaufruf zum Konvertieren beliebiger Werte in true oder false, letzteres ist ein Konstruktor für ein neues Boolean-Objekt, dass einen primitiven Boolean-Wert einkapselt. Objekte sind immer truthy, und deshalb würde der obige Beispiel-Code den "Autsch"-Alert anzeigen.

Das Boolean Objekt[Bearbeiten]

Das Boolean-Objekt definiert Methoden für Boole'sche Werte. Wenn JavaScript erkennt, dass auf einem primitiven Boole'schen Wert eine Methode aufgerufen werden soll, so erzeugt es ein Boolean-Objekt und benutzt es als this für diesen Methodenaufruf. Die beiden folgenden Zeilen bewirken exakt das Gleiche:

  false.toString()
  new Boolean(false).toString()

Das Boolean-Objekt speichert den primitiven Wert in einem internen, unveränderlichen Datenfeld. Er ist über die Methode valueOf() lesbar.

Eigenschaften

  • prototype

Erbt von

Methoden:

Boolean.prototype[Bearbeiten]

Objekte, die mit new Boolean() erstellt wurden, erben von Boolean.prototype und damit indirekt von Object.prototype.

Erbt von

  • Object

Eigenschaften

  • constructor - die Boolean-Funktion

Wie bei jedem Objekt ist auch für Boolean der Prototyp um eigene Methoden erweiterbar.

Beispiel ansehen …
  var elem = document.getElementById('button');
  elem.addEventListener('click', Meldung);	

  function layerCheck() {
    if (document.layers) {
      return true;
    } else {
      return false;
    }
  }

  function layerCheckCompact() {
    return Boolean(document.layers);
  }
    
  function Meldung() {
    text = 'Die Abfrage nach dem layer-Objekt ergibt: <span>' + layerCheck().toString() +'</span>';
    var ausgabe = document.getElementById('ausgabe');
    ausgabe.innerHTML = text;
  }

Beim Anklicken des Button wird der Rückgabewert der Funktion LayerCheck() ausgegeben, die in einem Script-Bereich notiert ist. Wenn der Browser das (veraltete) layers-Objekt kennt, wird true zurückgegeben, wenn nicht, dann false. Für die Ausgabe wird das Ergebnis in eine Zeichenkette umgewandelt. Es wird also entweder true oder false ausgegeben, je nachdem, ob der Browser Layer kennt oder nicht.

Die Funktion layerCheckCompact zeigt, wie man solche Abfragen durch Nutzung der Boolean-Funktion kompakter schreiben kann.