--- title: Логические операторы slug: Web/JavaScript/Reference/Operators/Логические_операторы translation_of: Web/JavaScript/Reference/Operators translation_of_original: Web/JavaScript/Reference/Operators/Logical_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}} |