Логические операторы, как правило, используются с булевыми значениями и возвращают булево значение.
Однако, в javascript операторы && и || возвращают не булево значение, а один из операндов, определивший значение выражения. Конечно, результат в таком случае может быть и не булевым.
Логические операторы описаны следующей таблицей:
Оператор
Использование
Описание
Логическое И (&&)
expr1 && expr2
Возвращает expr1, если оно может быть преобразовано к false; в ином случае возвращает expr2. Так что, при вызове с булевыми значениями, && вернет true только если оба операнда истинны, иначе false.
Логическое ИЛИ (||)
expr1 || expr2
Возвращает expr1, если оно может быть преобразовано к true; в ином случае возвращает expr2. Так что, при вызове с булевыми значении, || вернет true только хотя бы один операнд истинен, иначе вернет false.
Логическое НЕ (!)
!expr
Возаращает false, если операнд может быть преобразован к true, в ином случае возвращает true.
К false преобразуются, например: null, 0, пустая строка ("") и undefined.
Хотя операторы && и || и могут быть использованы для возвращения небулевых значений, они все же логические, так как возвращаемые значения могут быть приведены к булевому типу.
Оператор ! также используется для быстрого преобразования выражения к булевому значению:
Пример:
!!"string" = true
!!null = false
Сокращенные вычисления
Так как логические выражения вычисляются слева направо, они проверяются на возможность "сокращенных вычислений" по следующим правилам:
false && что угодно становится false.
true || что угодно становится true.
Эти правила логики гарантируют, что результат всегда правильный, но лишних вычислений при этом не проводится. Как следствие, невычисленные выражения не дадут побочных эффектов:
Пример:
a =1
check = 5 || (a=3)alert(a)// 1
Дежурная шутка
Вот прочитал в интернете, что репчатый лук улучшает память.
— Сейчас выйду из интернета, почищу луковицу, разрежу её пополам и начну натирать луком жесткий диск моего тормозного ноутбука.