Spec-Zone.ru › JavaScript

Логическое И (&&)

Базовый уровень Широко доступно

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с июля 2015 года.

Оператор логического И (&&) (логическая конъюнкция) для набора булевых операндов будет true тогда и только тогда, когда все операнды являются true. В противном случае он будет false.

В более общем смысле, оператор возвращает значение первого ложного операнда, встреченного при вычислении слева направо, или значение последнего операнда, если все они истинные.

Попробуйте

const a = 3;
const b = -2;

console.log(a > 0 && b > 0);
// Expected output: false

Синтаксис

x && y

Описание

Логическое И (&&) вычисляет операнды слева направо, немедленно возвращая значение первого встреченного ложного операнда; если все значения истинные, возвращается значение последнего операнда.

Если значение может быть преобразовано в true, это значение называется истинным. Если значение может быть преобразовано в false, это значение называется ложным.

Примеры выражений, которые могут быть преобразованы в false:

  • false;
  • null;
  • NaN;
  • 0;
  • пустая строка ("" или '' или ` `` `);
  • undefined.

Оператор И сохраняет небулевы значения и возвращает их как есть:

result = "" && "foo"; // result is assigned "" (empty string)
result = 2 && 0; // result is assigned 0
result = "foo" && 4; // result is assigned 4

Даже несмотря на то, что оператор && может использоваться с небулевыми операндами, он все равно считается булевым оператором, поскольку его возвращаемое значение всегда может быть преобразовано в булевый примитив. Чтобы явно преобразовать его возвращаемое значение (или любое выражение в целом) в соответствующее булево значение, используйте двойной оператор НЕ или конструктор Boolean.

Короткое замыкание

Выражение логического И является оператором короткого замыкания. Поскольку каждый операнд преобразуется в булево значение, если результат одного преобразования оказывается false, оператор И останавливается и возвращает исходное значение этого ложного операнда; он не вычисляет никакие из оставшихся операндов.

Рассмотрим приведенный ниже псевдокод.

(some falsy expression) && expr

Часть expr никогда не вычисляется, потому что первый операнд (some falsy expression) вычисляется как ложный. Если expr является функцией, функция никогда не вызывается. См. пример ниже:

function A() {
  console.log("called A");
  return false;
}
function B() {
  console.log("called B");
  return true;
}

console.log(A() && B());
// Logs "called A" to the console due to the call for function A,
// && evaluates to false (function A returns false), then false is logged to the console;
// the AND operator short-circuits here and ignores function B

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

Оператор И имеет более высокий приоритет, чем оператор ИЛИ, что означает, что оператор && выполняется раньше оператора || (см. приоритет операторов).

true || false && false; // true
true && (false || false); // false
(2 === 3) || (4 < 0) && (1 === 1); // false

Примеры

Использование И

Следующий код демонстрирует примеры оператора && (логического И).

a1 = true && true; // t && t returns true
a2 = true && false; // t && f returns false
a3 = false && true; // f && t returns false
a4 = false && 3 === 4; // f && f returns false
a5 = "Cat" && "Dog"; // t && t returns "Dog"
a6 = false && "Cat"; // f && t returns false
a7 = "Cat" && false; // t && f returns false
a8 = "" && false; // f && f returns ""
a9 = false && ""; // f && f returns false

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

Преобразование И в ИЛИ

Следующая операция с булевыми значениями:

bCondition1 && bCondition2

всегда равна:

!(!bCondition1 || !bCondition2)

Преобразование ИЛИ в И

Следующая операция с булевыми значениями:

bCondition1 || bCondition2

всегда равна:

!(!bCondition1 && !bCondition2)

Удаление вложенных скобок

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

Следующая составная операция с булевыми значениями:

bCondition1 || (bCondition2 && bCondition3)

всегда равна:

bCondition1 || bCondition2 && bCondition3

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

Спецификация
Спецификация языка ECMAScript® 2027
# prod-LogicalANDExpression

Совместимость с браузерами

Настольные Мобильные Сервер
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android WebView на iOS Bun Deno Node.js
logical_and
1
12
1
3
1
18
4
10.1
1
1.0
4.4
1
1.0.0
1.0
0.10.0

См. также

  • Boolean
  • Truthy
  • Falsy

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_AND

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API