Логічне І (&&)

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

Синтаксис

вираз1 && вираз2

Опис

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

Якщо значення може бути приведене до 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( A() && B() );
// виводить "викликано A" в результаті виклику функції,
// потім виводить false (що є результатом виклику оператора)

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

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

true || false && false      // вертає true, оскільки && виконується першим
(true || false) && false    // вертає false, бо пріоритет операторів не застосовується

Приклади

Використання І

Наступний код наводить приклади оператора && (логічне І).

a1 = true  && true       // t && t вертає true
a2 = true  && false      // t && f вертає false
a3 = false && true       // f && t вертає false
a4 = false && (3 == 4)   // f && f вертає false
a5 = 'Кіт' && 'Пес'      // t && t вертає "Пес"
a6 = false && 'Кіт'      // f && t вертає false
a7 = 'Кіт' && false      // t && f вертає false
a8 = ''    && false      // f && f вертає ""
a9 = false && ''         // f && f вертає false

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

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

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

bCondition1 && bCondition2

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

!(!bCondition1 || !bCondition2)

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

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

bCondition1 || bCondition2

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

!(!bCondition1 && !bCondition2)

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

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

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

bCondition1 || (bCondition2 && bCondition3)

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

bCondition1 || bCondition2 && bCondition3

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

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

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

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
Logical AND (&&)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

Див. також