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

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

Синтаксис

вираз1 || вираз2

Опис

Якщо вираз1 можна привести до true, вертає вираз1; інакше, вертає вираз2.

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

Прикладами виразів, які можуть бути приведені до false, є:

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

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

Обчислення з коротким замиканням

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

(якийсь правдивий вираз) || expr обчислюється як правдивий вираз.

Коротке замикання означає, що частина expr у прикладі не обчислюється, тому будь-які побічні ефекти від цього не відбудуться (наприклад, якщо expr є викликом функції, виклику не станеться). Це відбувається тому, що значення оператора вже визначене після обчислення першого операнду. Дивіться приклад:

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, бо пріоритет операторів не застосовується

Приклади

Використання АБО

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

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 = 'Кіт' || 'Пес'      // t || t вертає "Кіт"
o6 = false || 'Кіт'      // f || t вертає "Кіт"
o7 = 'Кіт' || false      // t || f вертає "Кіт"
o8 = ''    || false      // f || f вертає false
o9 = false || ''         // f || f вертає ""
o10 = false || varObject // f || об'єкт вертає varObject

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

Правила перетворення для булевих значень

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

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

bCondition1 && bCondition2

завжди дорівнює:

!(!bCondition1 || !bCondition2)

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

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

bCondition1 || bCondition2

завжди дорівнює:

!(!bCondition1 && !bCondition2)

Прибирання вкладених дужок

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

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

bCondition1 && (bCondition2 || bCondition3)

завжди дорівнює:

!(!bCondition1 || !bCondition2 && !bCondition3)

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

Специфікація
ECMAScript (ECMA-262)
The definition of 'Logical OR expression' in that specification.

Сумісність з веб-переглядачами

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
Logical OR (||)Chrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 3Opera Full support 3Safari Full support 1WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 10.1Safari iOS Full support 1Samsung Internet Android Full support 1.0nodejs Full support 0.1.100

Legend

Full support  
Full support

Див. також