Operatory logiczne
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
No compatibility data found for javascript.operators.logical
.
Check for problems with this page or contribute missing data to mdn/browser-compat-data.