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