Логическое ИЛИ (||)

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.

Обычно используется с булевыми (логическими) значениями. Тогда возвращается булевое значение. Однако фактически оператор || возвращает значение одного из операндов, поэтому если этот оператор используется с небулевыми значениями, он вернет небулевое значение.

Интерактивный пример

const a = 3;
const b = -2;

console.log(a > 0 || b > 0);
// Expected output: true

Синтаксис

js
expr1 || expr2;

Описание

Если expr1 может быть преобразовано в true, то вернётся expr1; в противном случае возвращается expr2.

Если значение может быть преобразовано в true, то оно рассматривается как истиноподобное (truthy). Если же значение может быть преобразовано в false, то оно называется ложноподобным (falsy).

Примеры выражений, которые могут быть преобразованы в false:

  • null;
  • NaN;
  • 0;
  • пустая строка ("", '', ``);
  • undefined.

Несмотря на то, что оператор || может использоваться с операндами без логических значений, это всё равно булевый оператор, поскольку его возвращаемое значение всегда можно преобразовать в булевый примитив. Чтобы явно преобразовать возвращаемое значение этого оператора (или вообще любое выражение) в соответствующее значение булевого типа, используйте двойной оператор НЕ или конструктор Boolean.

Сокращённое вычисление

Оператор логического ИЛИ вычисляется слева направо, делая возможным сокращённое вычисление выражения, согласно следующему правилу:

(истинноподобное выражение) || следующее выражение — вычисление останавливается на истинноподобном выражении;

Сокращенное вычисление хорошо тем, что следующее выражение не будет вычислено, т.е. всё, связанное с ним, будет проигнорировано (например, если следующее выражение представляет собой вызов функции, то он никогда не произойдёт). Всё потому, что значение оператора известно уже после вычисления первого операнда. Посмотрите на пример:

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® 2025 Language Specification
# prod-LogicalORExpression

Совместимость с браузерами

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
Logical OR (||)

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

Смотрите также