Логические операции обычно выполняются над Булевыми (логическими) значениями; при этом возвращается Булево значение. Однако операции && и || в действительности возвращают значение одного из специфицированных операндов, поэтому, если эти операции используются с не-Булевыми значениями, они могут возвратить не-Булево значение.
Реализованы в | JavaScript 1.0 |
Версия ECMA | ECMA-262 |
Логические операции описаны в следующей таблице.
&& | expr1 && expr2 | (Логическое AND/И) Возвращает expr1, если может быть конвертировано в false; иначе возвращает expr2. Таким образом, при использовании с Булевыми значениями, && возвращает true, если оба операнда true; иначе возвращает false. |
|| | expr1 || expr2 | (Логическое OR/ИЛИ) Возвращает expr1, если может быть конвертировано в false; иначе возвращает expr2. Таким образом, при использовании с Булевыми значениями, || возвращает true, если хотя бы один из операндов true; если оба false, возвращает false. |
! | !expr | (Логическое NOT/НЕ) Возвращает false, если единственный операнд может быть конвертирован в true; иначе возвращает true. |
Примерами выражений, которые могут быть конвертированы в false, являются те, которые вычисляются в null, 0, пустую строку ("") или undefined.
Хотя операции && и || могут использоваться с не-Булевыми операндами, они (операции) считаются всё же Булевыми, поскольку их return-значения всегда могут быть конвертированы в Boolean.
Сокращённый цикл вычислений. Поскольку логические выражения вычисляются слева направо, они проверяются на возможность "сокращённого/short-circuit" вычисления по следующим правилам:
Правила логики гарантируют, что эти вычисления всегда будут корректны. Обратите внимание, что часть anything вышеприведённых выражений не вычисляется, поэтому она не оказывает никакого действия на результат.