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

Оператор логічного І (&&) (логічної кон'юнкції) для набору булевих операндів буде 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
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 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

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