Boolean
(логического) типа. В этом случае результатом работы оператора является значение типа Boolean. Между тем операторы && и || возвращают, вообще говоря, значение одного из операнда, потому при использовании в качестве аргументов этих операторов величин, тип которых отличен от Boolean, тип возвращаемого значения может быть отличным от Boolean.Описание
В таблице приведены описания логических операторов:
Оператор | Использование | Описание |
---|---|---|
Логическое И (&&) | 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.
Правила логики гарантируют, что эти выражения всегда корректны. Заметьте, что любая часть выражений ниже не выполнится, так как любые побочные эффекты не сделают эффекта. Также заметьте, что любая часть выражения ниже - одиночное логическое выражение (отмечено скобками).
Например, следующие 2 функции делают одно и то же:
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)
Спецификации
Спецификация | Статус | Комментарий |
---|---|---|
ECMAScript 5.1 (ECMA-262) | Стандарт | Изначальное определение |
ECMAScript 5.1 (ECMA-262) | Стандарт | Определено в нескольких секциях спецификации: Логический оператор НЕ, Бинарные логические операторы |
ECMAScript 2015 (6th Edition, ECMA-262) | Стандарт | Определено в нескольких секциях спецификации: Логический оператор НЕ, Бинарные логические операторы |
ECMAScript 2017 Draft (ECMA-262) | Черновик | Определено в нескольких секциях спецификации: Логический оператор НЕ, Бинарные логические операторы |
Поддержка браузерами
Возможность | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Логическое И (&& ) |
(Да) | (Да) | (Да) | (Да) | (Да) |
Логическое ИЛИ (|| ) |
(Да) | (Да) | (Да) | (Да) | (Да) |
Логическое НЕ (! ) |
(Да) | (Да) | (Да) | (Да) | (Да) |
Возможность | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Логическое И (&& ) |
(Да) | (Да) | (Да) | (Да) | (Да) | (Да) |
Логическое ИЛИ (|| ) |
(Да) | (Да) | (Да) | (Да) | (Да) | (Да) |
Логическое НЕ (! ) |
(Да) | (Да) | (Да) | (Да) | (Да) | (Да) |