--- title: Логические операторы slug: Web/JavaScript/Reference/Operators/Логические_операторы translation_of: Web/JavaScript/Reference/Operators ---
В таблице приведены описания логических операторов:
| Оператор | Использование | Описание |
|---|---|---|
| Логическое И (&&) | expr1 && expr2 |
Возвращает значение expr1, если оно может быть преобразовано в false; иначе возвращает значение expr2. Таким образом, при использовании с величинами типа Boolean оператор && вернет true, если оба операнда могут быть преобразованы в true; иначе оператор && вернет false. |
Логическое ИЛИ (||) |
expr1 || expr2 |
Возвращает значение |
Логическое НЕ (!) |
!expr |
Возвращает false если значение expr можно привести к true; в противоположном случае возвращает true. |
Примеры значений выражений, которые могут быть преобразованы в false:
null;NaN;0;""); undefined.Хоть операторы && и || могут использовать операнды с не булевыми значениями, но они всёравно рассматриваются, как булевы операторы, т.к. их возвращаемые ими значения всегда могут быть сконвертированы в булевы значения.
Так как логические операторы выполняются слева направо, они проверяются на "короткие вычисления" по следующим правилам:
false && (anything) короткое вычисление дающее false.true || (anything) короткое замыкание дающее true.Часть выражения (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}} |