Логічне АБО (||)

Оператор логічного АБО (||) (логічна диз'юнкція) для набору булевих операндів буде true тоді й лише тоді, коли один або більше операндів будуть true. Його зазвичай застосовують щодо булевих (логічних) значень. У такому разі він повертає булеве значення. Однак насправді оператор || повертає значення одного з операндів, тож при використанні щодо небулевих значень він поверне небулеве значення.

Спробуйте його в дії

Синтаксис

x || y

Опис

Якщо x можна перетворити на true, повертає x; інакше – повертає y.

Якщо значення може бути перетворено на true, його називають істинним. Якщо значення може бути перетворено на false, його називають хибним.

Ось приклади виразів, які перетворюються на false:

  • null;
  • NaN;
  • 0;
  • порожній рядок ("" або '' або ``);
  • undefined.

Попри те, що оператор || може застосовуватися щодо небулевих операндів, він все одно вважається булевим, оскільки його повернене значення завжди може бути перетворено на булів примітив. Щоб явно перетворити його повернене значення (або будь-який вираз загалом) на відповідне булеве значення, слід використати подвійний оператор НЕ або конструктор Boolean().

Закорочення обчислення

Вираз логічного АБО обчислюється зліва направо та перевіряється на можливість "закорочення обчислення" за допомогою наступного правила:

(якійсь істинний вираз) || вирз закорочено обчислюється до true.

Закорочене означає, що частина вирз не обчислюється, тобто не трапляється ніяких побічних ефектів (якщо вирз це функція, то вона ніколи не викликається). Це пов'язано з тим, що значення оператора очевидне вже після обчислення першого операнда. Погляньте на приклад:

function A() {
  console.log("викликано A");
  return false;
}
function B() {
  console.log("викликано B");
  return true;
}

console.log(B() || A());
// Виводить у консоль "викликано B" через виклик функції,
// а потім виводить true (що є результатом оператора)

Пріоритет операторів

Наступні вирази можуть здаватися еквівалентними, але це не так, оскільки оператор && виконується перед || (дивіться пріоритет операторів).

true || false && false; // повертає true, оскільки спочатку виконується &&
(true || false) && false; // повертає false, оскільки групування має найвищий пріоритет

Приклади

Застосування АБО

Наступний код демонструє приклади з оператором || (логічне АБО).

true || true; // t || t повертає true
false || true; // f || t повертає true
true || false; // t || f повертає true
false || 3 === 4; // f || f повертає false
"Кіт" || "Пес"; // t || t повертає "Кіт"
false || "Кіт"; // f || t повертає "Кіт"
"Кіт" || false; // t || f повертає "Кіт"
"" || false; // f || f повертає false
false || ""; // f || f повертає ""
false || varObject; // f || object повертає varObject

[!NOTE] Якщо ви використовуєте цей оператор для надання запасного значення якійсь змінній, майте на увазі, що будь-яке хибне значення не буде використано. Якщо потрібно фільтрувати лише null або undefined, розгляньте використання оператора null-злиття.

Правила перетворення булевих операцій

Перетворення І на АБО

Наступна операція над булевими:

bCondition1 && bCondition2

завжди рівносильна щодо:

!(!bCondition1 || !bCondition2)

Перетворення АБО на І

Наступна операція над булевими:

bCondition1 || bCondition2

завжди рівносильна щодо:

!(!bCondition1 && !bCondition2)

Вилучення вкладених дужок

Оскільки логічні вирази обчислюються зліва направо, завжди можна вилучити зі складного виразу дужки, якщо дотримано кількох правил.

Наступна складена операція над булевими:

bCondition1 || (bCondition2 && bCondition3)

завжди рівносильна щодо:

bCondition1 || bCondition2 && bCondition3

Специфікації

Сумісність із браузерами

desktop mobile server
Chrome Edge Firefox Internet Explorer Opera Safari WebView Android Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet Deno Node.js
Logical OR (||)
Chrome Full support 1
Edge Full support 12
Firefox Full support 1
Internet Explorer Full support 3
Opera Full support 3
Safari Full support 1
WebView Android Full support 1
Chrome Android Full support 18
Firefox for Android Full support 4
Opera Android Full support 10.1
Safari on iOS Full support 1
Samsung Internet Full support 1.0
Deno Full support 1.0
Node.js Full support 0.10.0

Дивіться також