Logische Operatoren werden typischerweise im Zusammenhang mit Boolean (logischen) Werten verwendet. Die Operatoren && (Logisches UND) und || (Logisches ODER) geben dabei den Wert von einem der Operanden zurück. Sind die Operanden mit nicht-booleschen Werten belegt, geben diese Operatoren entsprechend nicht-boolesche Werte zurück.

Beschreibung

In der folgenden Tabelle werden die logischen Operatoren erläutert.

Operator Verwendung Beschreibung
Logisches UND (&&) ausdruck1 && ausdruck2 Gibt ausdruck1 zurück, wenn er zu false konvertiert werden kann; anderfalls wird ausdruck2 zurückgegeben. Sind beide Operanden true, gibt && true zurück, Andernfalls false.
Logisches ODER (||) ausdruck1 || ausdruck2 Gibt ausdruck1 zurück, wenn er zu true konvertiert werden kann; andernfalls wird ausdruck2 zurückgegeben. Ist einer der Operanden true, gibt || true zurück.
Logisches NICHT (!) !ausdruck Gibt false zurück, wenn der Operand zu true konvertiert werden kann. Andernfalls wird true zurückgegeben.

Wenn ein Wert zu true konvertiert werden kann, wird er truthy genannt. Wenn ein Wert zu false konvertiert werden kann, wird er falsy genannt.

Beispiele für Ausdrücke, die zu false konvertiert werden können:

  • null
  • NaN
  • 0
  • leerer String ("" oder '')
  • undefined

Auch wenn die Operatoren && und || mit nichtbooleschen Operanden verwendet werden können, gehören sie trotzdem zur Gruppe der logischen Operatoren, da ihre Rückgabewerte immer zu booleschen Werten konvertiert werden können.

Kurschlussauswertung (Short-Circuit Evaluation)

Logische Ausdrücke werden von links nach rechts ausgewertet und hierbei wird anhand der folgenden Regeln getestet, ob Kurzschlussauswertungen möglich sind:

  • false && (irgendwas) wird kurzerhand zu false.
  • true || (irgendwas) wird kurzerhand zu true.

Die Regeln der Logik garantieren, dass diese Auswertungen immer korrekt sind. Zu beachten ist, dass der irgendwas Teil nicht ausgewertet wird, so dass keine Seiteneffekte die von diesem Teil ausgehen ausgeführt werden. Zu beachten ist zudem, dass der irgendwas Teil ein einzelner Ausdruck ist (wie die Klammern anzeigen).

Beispielhaft betrachten wir die folgenden äquivalenten Funktionen:

function shortCircuitEvaluation() {
  // Logisches ODER (||)
  doSomething() || doSomethingElse();

  // Logisches UND (&&)
  doSomething() && doSomethingElse();
}

function equivalentEvaluation() {

  // Logisches ODER (||)
  var orFlag = doSomething();
  if (!orFlag) {
    doSomethingElse();
  }

  // Logisches UND (&&)
  var andFlag = doSomething();
  if (andFlag) {
    doSomethingElse();
  }
}

Die folgenden Ausdrücke sind aufgrund der Operatorrangfolgen nicht äquivalent und betont, wie wichtig es ist, dass der rechte Operand ein einzelner Ausdruck ist (gruppiert, falls in Klammern erforderlich).

false &&  true || true      // wird zu true
false && (true || true)     // wird zu false

Logisches UND (&&)

Im Folgenden sind Beispiele des && (logisches UND) Operators zu sehen.

a1 = true  && true      // t && t wird zu true
a2 = true  && false     // t && f wird zu false
a3 = false && true      // f && t wird zu false
a4 = false && (3 == 4)  // f && f wird zu false
a5 = 'Cat' && 'Dog'     // t && t wird zu "Dog"
a6 = false && 'Cat'     // f && t wird zu false
a7 = 'Cat' && false     // t && f wird zu false
a8 = ''    && false     // f && f wird zu ""
a9 = false && ''        // f && f wird zu false

Logisches ODER (||)

Im Folgenden sind Beispiele des || (logisches ODER) Operators zu sehen.

o1 = true  || true       // t || t wird zu true
o2 = false || true       // f || t wird zu true
o3 = true  || false      // t || f wird zu true
o4 = false || (3 == 4)   // f || f wird zu false
o5 = 'Cat' || 'Dog'      // t || t wird zu "Cat"
o6 = false || 'Cat'      // f || t wird zu "Cat"
o7 = 'Cat' || false      // t || f wird zu "Cat"
o8 = ''    || false      // f || f wird zu false
o9 = false || ''         // f || f wird zu ""

Logisches NICHT (!)

Im Folgenden sind Beispiele des ! (logisches NICHT) Operators zu sehen.

n1 = !true              // !t wird zu false
n2 = !false             // !f wird zu true
n3 = !"Cat"             // !t wird zu false

Konvertierungsregeln

Konvertierung von UND zu ODER

Die folgende Operation nutzt Booleane:

bCondition1 && bCondition2

ist äquivalent zum folgenden Ausdruck:

!(!bCondition1 || !bCondition2)

Konvertierung von ODER zu UND

Die folgende Operation nutzt Booleane:

bCondition1 || bCondition2

ist äquivalent zu folgendem Ausdruck:

!(!bCondition1 && !bCondition2)

Negierung des logischen NICHT

Die folgende Operation nutzt Booleane:

!!bCondition

ist äquivalent mit:

bCondition

Klammern in logischen Ausdrücken auflösen

Ein logischer Ausdruck wird von links nach rechts ausgewertet. Es ist immer möglich runde Klammern von einem komplexen Ausdruck zu entfernen, wenn einige Regeln beachtet werden.

Geschachteltes AND entfernen

Die folgende Operation nutzt Booleane:

bCondition1 || (bCondition2 && bCondition3)

ist äquivalent mit:

bCondition1 || bCondition2 && bCondition3

Geschachteltes OR entfernen

Die folgende Operation nutzt Booleane:

bCondition1 && (bCondition2 || bCondition3)

ist äquivalent mit:

!(!bCondition1 || !bCondition2 && !bCondition3)

Spezifikationen

Spezifikation Status Kommentar
ECMAScript 1st Edition (ECMA-262) Standard Initiale Definition.
ECMAScript 5.1 (ECMA-262) Standard Definiert in mehreren Kapiteln der Spezifikation: Logical NOT Operator, Binary Logical Operators
ECMAScript 2015 (6th Edition, ECMA-262) Standard Definiert in mehreren Kapiteln der Spezifikation: Logical NOT Operator, Binary Logical Operators
ECMAScript Latest Draft (ECMA-262) Entwurf Definiert in mehreren Kapiteln der Spezifikation: Logical NOT Operator, Binary Logical Operators

Browserkompatibilität

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid WebviewChrome für AndroidEdge MobileFirefox für AndroidOpera für AndroidiOS SafariSamsung InternetNode.js
Logical AND (&&)Chrome Vollständige Unterstützung JaEdge Vollständige Unterstützung JaFirefox Vollständige Unterstützung 1IE Vollständige Unterstützung JaOpera Vollständige Unterstützung JaSafari Vollständige Unterstützung JaWebView Android Vollständige Unterstützung JaChrome Android Vollständige Unterstützung JaEdge Mobile Vollständige Unterstützung JaFirefox Android Vollständige Unterstützung 4Opera Android Vollständige Unterstützung JaSafari iOS Vollständige Unterstützung JaSamsung Internet Android Vollständige Unterstützung Janodejs Vollständige Unterstützung Ja
Logical OR (||)Chrome Vollständige Unterstützung JaEdge Vollständige Unterstützung JaFirefox Vollständige Unterstützung 1IE Vollständige Unterstützung JaOpera Vollständige Unterstützung JaSafari Vollständige Unterstützung JaWebView Android Vollständige Unterstützung JaChrome Android Vollständige Unterstützung JaEdge Mobile Vollständige Unterstützung JaFirefox Android Vollständige Unterstützung 4Opera Android Vollständige Unterstützung JaSafari iOS Vollständige Unterstützung JaSamsung Internet Android Vollständige Unterstützung Janodejs Vollständige Unterstützung Ja
Logical NOT (!)Chrome Vollständige Unterstützung JaEdge Vollständige Unterstützung JaFirefox Vollständige Unterstützung 1IE Vollständige Unterstützung JaOpera Vollständige Unterstützung JaSafari Vollständige Unterstützung JaWebView Android Vollständige Unterstützung JaChrome Android Vollständige Unterstützung JaEdge Mobile Vollständige Unterstützung JaFirefox Android Vollständige Unterstützung 4Opera Android Vollständige Unterstützung JaSafari iOS Vollständige Unterstützung JaSamsung Internet Android Vollständige Unterstützung Janodejs Vollständige Unterstützung Ja

Legende

Vollständige Unterstützung  
Vollständige Unterstützung

Siehe auch

Schlagwörter des Dokuments und Mitwirkende

Mitwirkende an dieser Seite: schlagi123, LeisureLarry, Webastronaut
Zuletzt aktualisiert von: schlagi123,