Boolean (logicznymi) – wówczas zwracają również wartość typu logicznego. Jednakże operatory && i || w istocie zwracają wartość jednego z podanych operandów, więc jeśli operatory te są używane z wartościami nie-boolowskimi, wtedy mogą również zwracać nie-boolowskie wartości.The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
Opis
Operatory logiczne są opisane w poniższej tabeli:
| Operator | Użycie | Opis |
|---|---|---|
Logiczne AND (&&) |
expr1 && expr2 |
Zwraca expr1 jeśli wartość ta może być przekonwertowana na false, w przeciwnym razie zwraca expr2. Zatem, używany z wartościami typu logicznego, operator && zwraca true jeśli obydwa operandy mają wartość true, w przeciwnym razie zwraca false. |
Logiczne OR (||) |
expr1 || expr2 |
Zwraca expr1, jeśli wartość ta może być przekonwertowana na true; w przeciwnym razie zwraca expr2. Tak więc, używany z wartościami typu logicznego, operator || zwraca true którykolwiek z operandów równy jest true. |
Logiczne NOT (!) |
!expr |
Zwraca false jeśli jego operand można przekonwertować na true; w przeciwnym razie zwraca true. |
Jeśli dana wartość może być przekonwertowana na true, wówczas jest to tzw. wartość truthy. Jeśli dana wartość może być przekonwertowana na false, jest to tzw. wartość falsy.
Przykładami wyrażeń, które mogą być przekonwertowane na false są:
null;NaN;0;- pusty łańcuch znaków (string) –
""lub''; undefined.
Mimo tego, że operatory && i || mogą być używane z wartościami nie-boolowskimi, nadal mogą być uznane za operatory boolowskie (logiczne), gdyż zwracane przez nie wartości mogą być zawsze przekonwertowane na wartości logiczne.
Ewaluacja short-circuit
Ponieważ wyrażenia logiczne są przetwarzane od lewej do prawej, sprawdzana jest najkrótsza możliwa ścieżka, pozwalająca na zwrócenie wyniku całego wyrażenia (tzw. short-circuit evaluation), zgodnie z następującymi zasadami:
false && (cokolwiek)zostanie przetworzone na false.true || (cokolwiek)zostanie przetworzone na true.
Zasady logiki gwarantują, że powyższe ewaluacje są zawsze poprawne. Zauważ, że części wyrażeń oznaczone słowem cokolwiek nie są ewaluowane, więc nie pojawią się żadne efekty uboczne. Zauważ też, że część cokolwiek powyższych wyrażeń może być dowolnym pojedynczym wyrażeniem logicznym (co wskazano przez nawiasy).
Dla przykładu, poniższe dwie funkcje są równoważne.
function shortCircuitEvaluation() {
// logiczne OR (||)
doSomething() || doSomethingElse();
// logiczne AND (&&)
doSomething() && doSomethingElse();
}
function equivalentEvaluation() {
// logiczne OR (||)
var orFlag = doSomething();
if (!orFlag) {
doSomethingElse();
}
// logiczne AND (&&)
var andFlag = doSomething();
if (andFlag) {
doSomethingElse();
}
}
Poniższe wyrażenia nie są jednak równoważne ze względu na pierwszeństwo operatorów, co podkreśla, jak ważne jest, by operator po prawej stronie był pojedynczym wyrażeniem (zgrupowanym w razie potrzeby przy pomocy nawiasów).
false && true || true // zwraca true false && (true || true) // zwraca false
Logiczne AND (&&)
Poniżej pokazane są przykłady użycia operatora && (logicznego AND).
a1 = true && true // t && t zwraca true a2 = true && false // t && f zwraca false a3 = false && true // f && t zwraca false a4 = false && (3 == 4) // f && f zwraca false a5 = 'Cat' && 'Dog' // t && t zwraca "Dog" a6 = false && 'Cat' // f && t zwraca false a7 = 'Cat' && false // t && f zwraca false a8 = '' && false // f && f zwraca "" a9 = false && '' // f && f zwraca false
Logiczne OR (||)
Poniżej pokazane są przykłady użycia operatora || (logicznego OR).
o1 = true || true // t || t zwraca true o2 = false || true // f || t zwraca true o3 = true || false // t || f zwraca true o4 = false || (3 == 4) // f || f zwraca false o5 = 'Cat' || 'Dog' // t || t zwraca "Cat" o6 = false || 'Cat' // f || t zwraca "Cat" o7 = 'Cat' || false // t || f zwraca "Cat" o8 = '' || false // f || f zwraca false o9 = false || '' // f || f zwraca ""
Logiczne NOT (!)
Poniżej pokazane są przykłady użycia operatora ! (logicznego NOT).
n1 = !true // !t zwraca false n2 = !false // !f zwraca true n3 = !'Cat' // !t zwraca false
Podwójne NOT (!!)
Jest możliwe użycie kilku operatorów NOT naraz, by wprost wymusić konwersję dowolnej wartości do odpowiedniej wartości boolowskiej. Konwersja bazuje na „prawdziwości” lub „fałszywości” wartości (zobacz truthy i falsy).
Taka sama konwersja może być dokonana poprzez funkcję Boolean.
n1 = !!true // !!prawda zwraca true
n2 = !!{} // !!prawda returns true: każdy obiekt jest "prawdą"...
n3 = !!(new Boolean(false)) // ...nawet obiekty booloweskie z false jako wartością .valueOf()!
n4 = !!false // !!fałsz zwraca false
n5 = !!"" // !!fałsz zwraca false
n6 = !!Boolean(false) // !!fałsz zwraca false
Zasady przekształcania wyrażeń
Przekształcanie AND na OR
Poniższa operacja na wartościach logicznych:
bCondition1 && bCondition2
jest zawsze równa:
!(!bCondition1 || !bCondition2)
Przekształcanie OR na AND
Poniższa operacja na wartościach logicznych:
bCondition1 || bCondition2
jest zawsze równa:
!(!bCondition1 && !bCondition2)
Przekształcanie NOT
Poniższa operacja na wartościach logicznych:
!!bCondition
jest zawsze równa:
bCondition
Usuwanie zagnieżdżonych wyrażeń z nawiasami
Jako że wyrażenia logiczne są ewaluowane od lewej do prawej, jest zawsze możliwe usunięcie nawiasów ze złożonego wyrażenia przy użyciu pewnych, przedstawionych dalej, reguł.
Usuwanie zagnieżdżonego AND
Następujące wyrażenie złożone na wartościach logicznych:
bCondition1 || (bCondition2 && bCondition3)
jest zawsze równe:
bCondition1 || bCondition2 && bCondition3
Usuwanie zagnieżdżonego OR
Następujące wyrażenie złożone na wartościach logicznych:
bCondition1 && (bCondition2 || bCondition3)
jest zawsze równe:
!(!bCondition1 || !bCondition2 && !bCondition3)
Specyfikacje
| Specyfikacja | Status | Uwagi |
|---|---|---|
| ECMAScript 1st Edition (ECMA-262) | Standard | Definicja początkowa. |
| ECMAScript 5.1 (ECMA-262) | Standard | Zdefiniowane w kilku sekcjach specyfikacji: Logical NOT Operator, Binary Logical Operators |
| ECMAScript 2015 (6th Edition, ECMA-262) | Standard | Zdefiniowane w kilku sekcjach specyfikacji: Logical NOT Operator, Binary Logical Operators |
| ECMAScript (ECMA-262) | Living Standard | Zdefiniowane w kilku sekcjach specyfikacji: Logical NOT Operator, Binary Logical Operators |
Wsparcie przeglądarek
| Desktop | Mobile | Server | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Logical AND (&&) | Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | IE Full support 3 | Opera Full support 3 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 10.1 | Safari iOS Full support 1 | Samsung Internet Android Full support 1.0 | nodejs Full support 0.1.100 |
Logical OR (||) | Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | IE Full support 3 | Opera Full support 3 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 10.1 | Safari iOS Full support 1 | Samsung Internet Android Full support 1.0 | nodejs Full support 0.1.100 |
Logical NOT (!) | Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | IE Full support 3 | Opera Full support 3 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 10.1 | Safari iOS Full support 1 | Samsung Internet Android Full support 1.0 | nodejs Full support 0.1.100 |
Legend
- Full support
- Full support