--- 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 ---
{{jsSidebar("Operators")}}
Operatory logiczne są zazwyczaj używane z wartościami typu {{jsxref("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.
{{EmbedInteractiveExample("pages/js/expressions-logicaloperator.html")}}

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ść {{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ą:

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:

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 {{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

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
{{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

Wsparcie przeglądarek

{{Compat("javascript.operators.logical")}}

Zobacz też