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 dieser in den logischen Wert false konvertiert werden kann; anderfalls wird ausdruck2 zurückgegeben. Können also beide Operanden in den logischen Wert true konvertiert werden gibt && true zurück. Andernfalls false . |
Logisches ODER (|| ) |
ausdruck1 || ausdruck2 |
Gibt ausdruck1 zurück, wenn dieser zu true konvertiert werden kann; andernfalls wird ausdruck2 zurückgegeben. Kann also einer der Operanden zu true konvertiert werden gibt || true zurück. Sind beide Operanden false , wird false zurückgegeben. |
Logisches NICHT (! ) |
!ausdruck |
Gibt false zurück, wenn der Operand zu true konvertiert werden kann. Andernfalls wird true zurückgegeben. Der logische Wert von ausdruck wird also negiert. |
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
Convertiert werden sind:
null
- NaN
0
""
(leerer String)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)
Da logische Ausdrücke von links nach rechts ausgewertet werden, wird hierbei anhand der folgenden Regeln getestet, ob Kurzschlussauswertungen (engl. Short-Circuit Evaluation) 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. Beachte, dass "irgendwas" ein einfacher Operand und kein weiterer logischer Ausdruck ist und infolgedessen nicht ausgewertet wird.
Beispielhaft betrachten wir die folgenden äquivalenten Funktionen:
function shortCircuitEvaluation() { doSomething() || doSomethingElse() } function equivalentEvaluation() { var flag = doSomething(); if (!flag) { doSomethingElse(); } }
Besteht der rechte Operand aus mehreren Ausdrücken funktioniert die Kurzschlussauswertung nicht mehr aufgrund unterschiedlicher Operatorrangfolgen. Durch die Gruppierung von Ausdrücken in Klammern kann die Ausführungsreihenfolge, ähnlich bei arithmetischen Operationen, geändert werden. Ein in Klammern gesetzter Ausdruck wird folglich zuerst ausgewertet und zu einem booleschen Wert konvertiert.
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
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"
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:
a && b
ist äquivalent zum folgenden Ausdruck:
!(!a || !b)
Konvertierung von ODER zu UND
Die folgende Operation nutzt Booleane:
a || b
ist äquivalent zu folgendem Ausdruck:
!(!a && !b)
Negierung des logischen NICHT
Die folgende Operation nutzt Booleane:
!!a
ist äquivalent mit:
a
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:
a || (b && c)
ist äquivalent mit:
a || b && c
Geschachteltes OR entfernen
Die folgende Operation nutzt Booleane:
a && (b || c)
ist äquivalent mit:
!(!a || !b && !c)
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 2017 Draft (ECMA-262) | Entwurf | Definiert in mehreren Kapiteln der Spezifikation: Logical NOT Operator, Binary Logical Operators |
Browserkompatibilität
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Logical AND (&& ) |
(Ja) | (Ja) | (Ja) | (Ja) | (Ja) |
Logical OR (|| ) |
(Ja) | (Ja) | (Ja) | (Ja) | (Ja) |
Logical NOT (! ) |
(Ja) | (Ja) | (Ja) | (Ja) | (Ja) |
Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Logical AND (&& ) |
(Ja) | (Ja) | (Ja) | (Ja) | (Ja) | (Ja) |
Logical OR (|| ) |
(Ja) | (Ja) | (Ja) | (Ja) | (Ja) | (Ja) |
Logical NOT (! ) |
(Ja) | (Ja) | (Ja) | (Ja) | (Ja) | (Ja) |