Логічне І (&&)
Оператор логічного І (&&
) (логічної кон'юнкції) для набору булевих операндів буде true
тоді й лише тоді, коли всі операнди будуть true
. Інакше – він буде false
.
Якщо більш загально, то цей оператор повертає значення першого хибного операнда, що зустрівся при обчисленні зліва направо, або значення останнього операнда, якщо всі операнди – істинні.
Спробуйте його в дії
Синтаксис
x && y
Опис
Логічне І (&&
) обчислює операнди зліва направо, негайно повертаючи значення першого хибного операнда, що зустрівся; якщо всі значення – істинні, то повертається значення останнього з них.
Якщо значення можна перетворити на true
, то це значення є так званим істинним. Якщо значення можна перетворити на false
, то воно є так званим хибним.
Приклади виразів, що можуть бути перетворені на хибу:
false
;null
;NaN
;0
;- порожній рядок (
""
або''
або``
); undefined
.
Оператор І зберігає небулеві значення та повертає їх як є:
result = "" && "foo"; // result присвоюється "" (порожній рядок)
result = 2 && 0; // result присвоюється 0
result = "foo" && 4; // result присвоюється 4
Навіть попри те, що оператор &&
може вживатися над небулевими операндами, він все одно вважається булевим оператором, оскільки його повернене значення завжди може бути перетворено на булів примітив.
Щоб явно перетворити його повернене значення (або будь-який вираз загалом) на відповідне булеве значення, слід використати подвійний оператор НЕ або конструктор Boolean
.
Закорочення обчислення
Вираз логічного І – це оператор з закороченням.
Оскільки кожний операнд перетворюється на булеве значення, то якщо результат одного перетворення виявиться false
, то оператор І зупиняється та повертає вихідне значення цього хибного операнда; він не обчислює жодного з решти операндів.
Погляньмо на псевдокод нижче.
(якийсь хибний вираз) && вирз
Частина вирз
ніколи не обчислюється, тому що перший операнд (якийсь хибний вираз)
обчислюється як хибний.
Якщо вирз
– це функція, то вона ніколи не викликається.
Погляньте на приклад нижче:
function A() {
console.log("викликано A");
return false;
}
function B() {
console.log("викликано B");
return true;
}
console.log(A() && B());
// Виводить у консоль "викликано A", оскільки викликано функцію A,
// && обчислюється в false (функція A повертає false), тому false виводиться у консоль;
// оператор І тут закорочується та ігнорує функцію B
Пріоритет операторів
Оператор І має вищий пріоритет, ніж оператор АБО, а отже – оператор &&
виконується до оператора ||
(дивіться пріоритет операторів).
true || false && false; // true
true && (false || false); // false
(2 === 3) || (4 < 0) && (1 === 1); // 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
Специфікації
Сумісність із браузерами
desktop | mobile | server | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Logical AND ( && )
|
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 |