Логическое ИЛИ (||)
Логический оператор ИЛИ (||
) (дизъюнкция) для набора операндов истинен будет true
только в случае, если один или несколько его операндов имеют значение true
.
Обычно используется с булевыми
(логическими) значениями. Тогда возвращается булевое значение. Однако фактически оператор ||
возвращает значение одного из операндов, поэтому если этот оператор используется с небулевыми значениями, он вернет небулевое значение.
Интерактивный пример
Синтаксис
js
expr1 || expr2
Описание
Если expr1
может быть преобразовано в true
, то вернётся expr1
; в противном случае возвращается expr2
.
Если значение может быть преобразовано в true
, то оно рассматривается как истиноподобное (truthy). Если же значение может быть преобразовано в false
, то оно называется ложноподобным (falsy).
Примеры выражений, которые могут быть преобразованы в false
:
null
;NaN
;0
;- пустая строка (
""
,''
,``
); undefined
.
Несмотря на то, что оператор ||
может использоваться с операндами без логических значений, это всё равно булевый оператор, поскольку его возвращаемое значение всегда можно преобразовать в булевый примитив.
Чтобы явно преобразовать возвращаемое значение этого оператора (или вообще любое выражение) в соответствующее значение булевого типа, используйте двойной оператор НЕ
или конструктор Boolean
(en-US).
Сокращённое вычисление
Оператор логического ИЛИ вычисляется слева направо, делая возможным сокращённое вычисление выражения, согласно следующему правилу:
(истинноподобное выражение) || следующее выражение
— вычисление останавливается на истинноподобном выражении;
Сокращенное вычисление хорошо тем, что следующее выражение
не будет вычислено, т.е. всё, связанное с ним, будет проигнорировано (например, если
следующее выражение
представляет собой вызов функции, то он никогда не произойдёт). Всё потому, что значение оператора известно уже после вычисления первого операнда. Посмотрите на пример:
js
function A(){ console.log('вызвана функция A'); return false; }
function B(){ console.log('вызвана функция B'); return true; }
console.log( B() || A() );
// В результате вызова функции B, в консоли будет выведено "вызвана функция B",
// а далее в консоли появится false (это результат оператора)
Приоритет операторов
Следующие выражения могут показаться эквивалентными, но это не так, потому что оператор &&
выполняется до оператора ||
(см. приоритет операторов).
js
true || false && false // вернёт true, поскольку сначала вычисляется &&
(true || false) && false // вернёт false, поскольку у группировки выше приоритет
Примеры
Использование оператора ИЛИ
В следующем коде показаны примеры использования оператора ||
(логическое ИЛИ).
js
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"
o8 = '' || false // f || f вернёт false
o9 = false || '' // f || f вернёт ""
o10 = false || varObject // f || object вернёт varObject
Примечание: Если вы используете этот оператор, чтобы задать значение по умолчанию для некоторой переменной, имейте в виду, что любое ложноподобное будет проигнорировано. Если вам нужно исключить только null
или undefined
, попробуйте воспользоваться оператором нулевого слияния.
Правила конвертации для булевых значений
Конвертация И в ИЛИ
Следующая операция с булевыми значениями:
js
bCondition1 && bCondition2
всегда эквивалентна:
js
!(!bCondition1 || !bCondition2)
Конвертация ИЛИ в И
Следующая операция с булевыми значениями:
js
bCondition1 || bCondition2
всегда эквивалентна:
js
!(!bCondition1 && !bCondition2)
Удаление вложенных круглых скобок
Поскольку логические выражения вычисляются слева направо, всегда можно удалить круглые скобки из сложного выражения при условии соблюдения определенных правил.
Следующая составная операция с булевыми значениями:
js
bCondition1 && (bCondition2 || bCondition3)
всегда эквивалентна:
js
!(!bCondition1 || !bCondition2 && !bCondition3)
Спецификации
Specification |
---|
ECMAScript Language Specification # prod-LogicalORExpression |
Поддержка браузерами
BCD tables only load in the browser