--- title: Operatory logiczne slug: >- conflicting/Web/JavaScript/Reference/Operators_8afb1abf2138289c890ee09e799ff26e translation_of: Web/JavaScript/Reference/Operators translation_of_original: Web/JavaScript/Reference/Operators/Logical_Operators original_slug: Web/JavaScript/Referencje/Operatory/Logical_Operators ---
&&
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.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ść {{Glossary("truthy")}}. Jeśli dana wartość może być przekonwertowana na false
, jest to tzw. wartość {{Glossary("falsy")}}.
Przykładami wyrażeń, które mogą być przekonwertowane na false są:
null
;NaN;
0
;""
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.
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
&&
)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
||
)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 ""
!
)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
!!
)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 {{Glossary("truthy")}} i {{Glossary("falsy")}}).
Taka sama konwersja może być dokonana poprzez funkcję {{jsxref("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
Poniższa operacja na wartościach logicznych:
bCondition1 && bCondition2
jest zawsze równa:
!(!bCondition1 || !bCondition2)
Poniższa operacja na wartościach logicznych:
bCondition1 || bCondition2
jest zawsze równa:
!(!bCondition1 && !bCondition2)
Poniższa operacja na wartościach logicznych:
!!bCondition
jest zawsze równa:
bCondition
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ł.
Następujące wyrażenie złożone na wartościach logicznych:
bCondition1 || (bCondition2 && bCondition3)
jest zawsze równe:
bCondition1 || bCondition2 && bCondition3
Następujące wyrażenie złożone na wartościach logicznych:
bCondition1 && (bCondition2 || bCondition3)
jest zawsze równe:
!(!bCondition1 || !bCondition2 && !bCondition3)
Specyfikacja | Status | Uwagi |
---|---|---|
{{SpecName('ES1')}} | {{Spec2('ES1')}} | Definicja początkowa. |
{{SpecName('ES5.1', '#sec-11.11')}} | {{Spec2('ES5.1')}} | Zdefiniowane w kilku sekcjach specyfikacji: Logical NOT Operator, Binary Logical Operators |
{{SpecName('ES6', '#sec-binary-logical-operators')}} | {{Spec2('ES6')}} | Zdefiniowane w kilku sekcjach specyfikacji: Logical NOT Operator, Binary Logical Operators |
{{SpecName('ESDraft', '#sec-binary-logical-operators')}} | {{Spec2('ESDraft')}} | Zdefiniowane w kilku sekcjach specyfikacji: Logical NOT Operator, Binary Logical Operators |
{{Compat("javascript.operators.logical")}}