--- title: Логические операторы slug: Web/JavaScript/Reference/Operators/Логические_операторы translation_of: Web/JavaScript/Reference/Operators translation_of_original: Web/JavaScript/Reference/Operators/Logical_Operators ---
{{jsSidebar("Operators")}}
Логические операторы используются, как правило, с примитивами {{jsxref("Boolean")}} (логического) типа. В этом случае результатом работы оператора является значение типа Boolean. Между тем операторы && и || возвращают, вообще говоря, значение одного из операнда, потому при использовании в качестве аргументов этих операторов величин, тип которых отличен от Boolean, тип возвращаемого значения может быть отличным от Boolean.

Описание

В таблице приведены описания логических операторов:

Оператор Использование Описание
Логическое И (&&) expr1 && expr2 Возвращает значение expr1, если оно может быть преобразовано в false; иначе возвращает значение expr2. Таким образом, при использовании с величинами типа Boolean оператор && вернет true, если оба операнда могут быть преобразованы в true; иначе оператор && вернет false. 
Логическое ИЛИ (||) expr1 || expr2

Возвращает значение expr1, если оно может быть преобразовано в true; иначе возвращает значение expr2. Таким образом, при использовании с величинами типа Boolean оператор || вернет true если хоть один из них равен true; в других случаях вернет false.

Логическое НЕ (!) !expr Возвращает false если значение expr можно привести к true;  в противоположном случае возвращает true.

Примеры значений выражений, которые могут быть преобразованы в false:

Хоть операторы && и || могут использовать операнды с не булевыми значениями, но они всёравно рассматриваются, как булевы операторы, т.к. их возвращаемые ими значения всегда могут быть сконвертированы в булевы значения.

Короткая схема вычислений

Так как логические операторы выполняются слева направо, они проверяются на "короткие вычисления" по следующим правилам:

Часть выражения (anything) не вычисляется. Если в ней есть вызов функции, то эта функция не будет вызвана.

Например, следующие две функции делают одно и тоже:

function shortCircuitEvaluation() {
  doSomething() || doSomethingElse()
}

function equivalentEvaluation() {
  var flag = doSomething();
  if (!flag) {
    doSomethingElse();
  }
}

Однако, следующие выражения дают разный результат в связи с приоритетом операторов.

false && true  || true      // вернёт true
false && (true || true)     // вернёт false

Логическое И (&&)

Следующий код показывает пример оператора && (логическое И).

a1 = true  && true      // t && t вернёт true
a2 = true  && false     // t && f вернёт false
a3 = false && true      // f && t вернёт false
a4 = false && (3 == 4)  // f && f вернёт false
a5 = "Cat" && "Dog"     // t && t вернёт "Dog"
a6 = false && "Cat"     // f && t вернёт false
a7 = "Cat" && false     // t && f вернёт false

Логическое ИЛИ (||)

Это код представляет собой пример оператора || (логическое ИЛИ).

o1 = true  || true       // t || t вернёт true
o2 = false || true       // f || t вернёт true
o3 = true  || false      // t || f вернёт true
o4 = false || (3 == 4)   // f || f вернёт false
o5 = "Cat" || "Dog"      // t || t вернёт "Cat"
o6 = false || "Cat"      // f || t вернёт "Cat"
o7 = "Cat" || false      // t || f вернёт "Cat"

Логическое НЕ (!)

Следующий код является примером оператора ! (логическое НЕ).

n1 = !true              // !t вернёт false
n2 = !false             // !f вернёт true
n3 = !"Cat"             // !t вернёт false

Правила преобразования

Конвертирование И в ИЛИ

следующая операция использует булев тип:

bCondition1 && bCondition2

это всегда равно:

!(!bCondition1 || !bCondition2)

Конвертирование ИЛИ в И

эта операция использует булев тип:

bCondition1 || bCondition2

что эквивалентно:

!(!bCondition1 && !bCondition2)

Конвертирование многих НЕ

следующая операция использует булев тип:

!!bCondition

что равно:

bCondition

Удаление вложенных скобок

Так как логические выражения выполняются слева направо, становится возможным удалить круглые скобки из комплексного выражения, следуя следующим правилам.

Удаление вложенных И

Это составное выражение использует булев тип:

bCondition1 || (bCondition2 && bCondition3)

что будет равным:

bCondition1 || bCondition2 && bCondition3

Удаление вложенного ИЛИ

Следующее составное выражение использует булев тип:

bCondition1 && (bCondition2 || bCondition3)

всегда равно:

!(!bCondition1 || !bCondition2 && !bCondition3)

Спецификации

Спецификация Статус Комментарий
{{SpecName('ES5.1')}} {{Spec2('ES1')}} Изначальное определение
{{SpecName('ES5.1', '#sec-11.11')}} {{Spec2('ES5.1')}} Определено в нескольких секциях спецификации: Логический оператор НЕ, Бинарные логические операторы
{{SpecName('ES6', '#sec-binary-logical-operators')}} {{Spec2('ES6')}} Определено в нескольких секциях спецификации: Логический оператор НЕ, Бинарные логические операторы
{{SpecName('ESDraft', '#sec-binary-logical-operators')}} {{Spec2('ESDraft')}} Определено в нескольких секциях спецификации: Логический оператор НЕ, Бинарные логические операторы

Поддержка браузерами

{{CompatibilityTable}}

Возможность Chrome Firefox (Gecko) Internet Explorer Opera Safari
Логическое И (&&) {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatVersionUnknown}}
Логическое ИЛИ (||) {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatVersionUnknown}}
Логическое НЕ (!) {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatVersionUnknown}}
Возможность Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Логическое И (&&) {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatVersionUnknown}}
Логическое ИЛИ (||) {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatVersionUnknown}}
Логическое НЕ (!) {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatVersionUnknown}}

Смотрите также