--- title: Логічне І (&&) slug: Web/JavaScript/Reference/Operators/Logical_AND tags: - JavaScript - Довідка - Логічний оператор - Оператор translation_of: Web/JavaScript/Reference/Operators/Logical_AND ---
Логічний оператор І (&&
) (логічна кон'юнкція) для набору операндів дорівнює true тільки тоді, коли усі його операнди дорівнюють true. Він зазвичай використовується з {{jsxref("Boolean","булевими")}} (логічними) значеннями. У цьому випадку він повертає булеве значення. Однак, оператор &&
насправді повертає значення одного з наданих операндів, а отже, якщо цей оператор застосовується не з булевими значеннями, він поверне не булеве значення.
вираз1 && вираз2
Якщо вираз1
може бути приведений до true
, вертає вираз2
; інакше, вертає вираз1
.
Якщо значення може бути приведене до true
, воно є так званим {{Glossary("truthy", "правдивим")}} значенням. Якщо значення може бути приведене до false
, воно називається {{Glossary("falsy", "хибним")}}.
Прикладами виразів, які можуть бути приведені до false, є:
null
;NaN
;0
;""
або ''
, або ``
);undefined
.Хоча оператори &&
та ||
можуть використовуватись з операндами не булевого типу, вони все одно можуть вважатися булевими операторами, оскільки значення, які вони повертають, завжди можуть бути приведені до булевих примітивів. Щоб явно перетворити повернені значення (або, взагалі, будь-який вираз) до відповідного булевого значення, скористайтесь подвійним оператором НЕ або конструктором {{jsxref("Global_Objects/Boolean/Boolean", "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
Специфікація |
---|
{{SpecName('ESDraft', '#prod-LogicalANDExpression', 'Logical AND expression')}} |
{{Compat("javascript.operators.logical_and")}}