Movatterモバイル変換


[0]ホーム

URL:


  1. 面向开发者的 Web 技术
  2. JavaScript
  3. JavaScript 参考
  4. 表达式和运算符
  5. 逻辑与(&&)

此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。

View in EnglishAlways switch to English

逻辑与(&&)

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

一般来说,当从左到右求值时,该操作符返回第一个假值操作数的值;如果它们都是真值,则返回最后一个操作数的值。

尝试一下

const a = 3;const b = -2;console.log(a > 0 && b > 0);// Expected output: false

语法

js
expr1 && expr2

描述

逻辑与(&&)运算符从左到右对操作数求值,遇到第一个假值操作数时立即返回;如果所有的操作数都是真值,则返回最后一个操作数的值。

能够转化为true 的值叫做真值,能够转化为false 的值叫做假值

能够转化为 false 的表达式的示例如下:

  • false
  • null
  • NaN
  • 0
  • 空字符串(""''``);
  • undefined

与运算符会保留所有非布尔值,并原样返回它们:

js
result = "" && "foo"; // 结果被赋值为 ""(空字符串)result = 2 && 0; // 结果被赋值为 0result = "foo" && 4; // 结果被赋值为 4

尽管&& 运算符可以与非布尔操作数一起使用,但它仍然被认为是一个布尔运算符,因为它的返回值总是可以被转换为布尔基本类型。要明确地将其返回值(或任何一般的表达式)转换为相应的布尔值,请使用双非运算符Boolean 构造函数。

短路求值

逻辑与是一种短路运算符。当每个操作数被转换为布尔值时,如果发现一个转换的结果是false,那么逻辑与运算符就会停止,并返回该假操作数的原始值;它不会对任何其余的操作数求值。

考虑如下伪代码。

(some falsy expression) && expr

expr 部分永远不会被求值,因为第一个操作数(some falsy expression) 被求值为假值。如果expr 是一个函数,它将不会被调用。查看如下示例:

js
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 函数

运算符优先级

与运算符的优先级高于或运算符,这意味着&& 运算符在|| 运算符前执行(参见运算符优先级)。

js
true || (false && false); // truetrue && (false || false); // false2 === 3 || (4 < 0 && 1 === 1); // false

示例

使用与运算符

下列代码展示了&&(逻辑与)运算符的用法。

js
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

布尔值转化规则

与运算符转化为或运算符

下述涉及到布尔运算符的运算:

js
bCondition1 && bCondition2

总是与此表达式相同:

js
!(!bCondition1 || !bCondition2)

或运算符转化为与运算符

下述涉及到布尔运算符的运算:

js
bCondition1 || bCondition2

总是与此表达式相同:

js
!(!bCondition1 && !bCondition2)

去除嵌套的括号

由于逻辑表达式是从左到右进行求值的,只要遵循一定的规则,总是可以从一个复杂的表达式中删除括号。

下述涉及到布尔运算符的复杂运算:

js
bCondition1 || (bCondition2 && bCondition3)

总是与此表达式相同:

js
bCondition1 || bCondition2 && bCondition3

规范

Specification
ECMAScript® 2026 Language Specification
# prod-LogicalANDExpression

浏览器兼容性

参见

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp