此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。
逻辑与(&&)
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015年7月.
当且仅当所有操作数为true 时,一组布尔操作数的逻辑与(&&,逻辑连接)运算结果为true,否则为false。
In this article
尝试一下
const a = 3;const b = -2;console.log(a > 0 && b > 0);// Expected output: false语法
expr1 && expr2描述
逻辑与(&&)运算符从左到右对操作数求值,遇到第一个假值操作数时立即返回;如果所有的操作数都是真值,则返回最后一个操作数的值。
能够转化为true 的值叫做真值,能够转化为false 的值叫做假值。
能够转化为 false 的表达式的示例如下:
false;null;NaN;0;- 空字符串(
""或''或``); undefined。
与运算符会保留所有非布尔值,并原样返回它们:
result = "" && "foo"; // 结果被赋值为 ""(空字符串)result = 2 && 0; // 结果被赋值为 0result = "foo" && 4; // 结果被赋值为 4尽管&& 运算符可以与非布尔操作数一起使用,但它仍然被认为是一个布尔运算符,因为它的返回值总是可以被转换为布尔基本类型。要明确地将其返回值(或任何一般的表达式)转换为相应的布尔值,请使用双非运算符或Boolean 构造函数。
短路求值
逻辑与是一种短路运算符。当每个操作数被转换为布尔值时,如果发现一个转换的结果是false,那么逻辑与运算符就会停止,并返回该假操作数的原始值;它不会对任何其余的操作数求值。
考虑如下伪代码。
(some falsy expression) && expr
expr 部分永远不会被求值,因为第一个操作数(some falsy expression) 被求值为假值。如果expr 是一个函数,它将不会被调用。查看如下示例:
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); // truetrue && (false || false); // false2 === 3 || (4 < 0 && 1 === 1); // false示例
>使用与运算符
下列代码展示了&&(逻辑与)运算符的用法。
a1 = true && true; // t && t returns truea2 = true && false; // t && f returns falsea3 = false && true; // f && t returns falsea4 = false && 3 === 4; // f && f returns falsea5 = "Cat" && "Dog"; // t && t returns "Dog"a6 = false && "Cat"; // f && t returns falsea7 = "Cat" && false; // t && f returns falsea8 = "" && false; // f && f returns ""a9 = false && ""; // f && f returns false布尔值转化规则
与运算符转化为或运算符
下述涉及到布尔运算符的运算:
bCondition1 && bCondition2总是与此表达式相同:
!(!bCondition1 || !bCondition2)或运算符转化为与运算符
下述涉及到布尔运算符的运算:
bCondition1 || bCondition2总是与此表达式相同:
!(!bCondition1 && !bCondition2)去除嵌套的括号
由于逻辑表达式是从左到右进行求值的,只要遵循一定的规则,总是可以从一个复杂的表达式中删除括号。
下述涉及到布尔运算符的复杂运算:
bCondition1 || (bCondition2 && bCondition3)总是与此表达式相同:
bCondition1 || bCondition2 && bCondition3规范
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # prod-LogicalANDExpression> |