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