This page was translated from English by the community.Learn more and join the MDN Web Docs community.
Логическое И (&&)
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since июль 2015 г..
Логический оператор И (&&) (конъюнкция) для набора операндов со значением типаBoolean будетtrue только в случае, если все операнды содержат значениеtrue. В противном случае это будетfalse.
В целом, оператор вернёт значение первоголожноподобного операнда при вычислении, либо значение последнего операнда, если все операнды оказалисьистиноподобными.
In this article
Интерактивный пример
const a = 3;const b = -2;console.log(a > 0 && b > 0);// Expected output: falseСинтаксис
expr1 && expr2;Описание
Логическое И (&&) вычисляет операнды слева направо, возвращая сразу значение первого попавшеголожноподобного операнда; если все значенияистиноподобны, возвращается значение последнего операнда.
Если значение может быть преобразовано вtrue, то оно рассматривается какистиноподобное (truthy). Если же значение может быть преобразовано вfalse, то оно называетсяложноподобным (falsy).
Примеры выражений, которые могут быть преобразованы вfalse:
false;null;NaN;0;- пустая строка (
"",'',``); undefined.
Оператор И возвращает небулевы значения как есть:
result = "" && "foo"; // result is assigned "" (empty string)result = 2 && 0; // result is assigned 0result = "foo" && 4; // result is assigned 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Приоритет операторов
Оператор И имеет более высокий приоритет, чем оператор ИЛИ, поэтому оператор&& выполнится раньше оператора|| (см.приоритет операторов).
false || (true && true); // вернёт truetrue && (false || false); // вернёт false2 == 3 || (4 < 0 && 1 == 1); // вернёт falseПримеры
>Использование оператора И
В следующем коде показаны примеры использования оператора&& (логическое И).
a1 = true && true; // t && t вернёт truea2 = true && false; // t && f вернёт falsea3 = false && true; // f && t вернёт falsea4 = false && 3 == 4; // f && f вернёт falsea5 = "Cat" && "Dog"; // t && t вернёт "Dog"a6 = false && "Cat"; // f && t вернёт falsea7 = "Cat" && false; // t && f вернёт falsea8 = "" && false; // f && f вернёт ""a9 = false && ""; // f && f вернёт falseПравила преобразования булевых значений
Конвертация И к ИЛИ
Следующая операция сбулевыми значениями:
bCondition1 && bCondition2;всегда эквивалентна:
!(!bCondition1 || !bCondition2);Конвертация ИЛИ к И
Следующая операция сбулевыми значениями:
bCondition1 || bCondition2;всегда эквивалентна:
!(!bCondition1 && !bCondition2);Удаление вложенных круглых скобок
Поскольку логические выражения вычисляются слева направо, всегда можно удалить круглые скобки из сложного выражения при условии соблюдения определенных правил.
Следующая составная операция сбулевыми значениями:
bCondition1 || (bCondition2 && bCondition3);это то же самое, что и:
bCondition1 || (bCondition2 && bCondition3);Спецификации
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # prod-LogicalANDExpression> |