逻辑与(&&)

这个逻辑与(&&)一组布尔操作数的(逻辑合取)运算符将是真的当且仅当所有操作数都是真的。否则将是.

更一般地,操作符返回第一个虚伪的从左到右求值时遇到的操作数,或最后一个操作数的值(如果都是)真实的.

试试看

语法

js型
x和y

描述

逻辑与(&&)从左到右计算操作数,立即返回第一个操作数的值虚伪的遇到的操作数;如果所有值都是真实的,返回最后一个操作数的值。

如果值可以转换为真的,该值就是所谓的真实的。如果值可以转换为,该值就是所谓的虚伪的.

可以转换为false的表达式示例如下:

  • ;
  • 无效的;
  • 硝酸钠;
  • 0;
  • 空字符串(""''``);
  • 未定义.

AND运算符保留非布尔值并按原样返回它们:

js型
result=“”&&“foo”;//结果被赋值为“”(空字符串)结果=2&&0;//结果赋值为0result=“foo”&&4;//结果分配为4

尽管&&运算符可以与非布尔操作数一起使用,它仍然被视为布尔运算符,因为其返回值可以始终为转换为布尔基元.要显式地将其返回值(或任何一般表达式)转换为相应的布尔值,请使用双精度NOT运算符布尔值构造函数。

短路评估

逻辑AND表达式是一个短路运算符。当每个操作数转换为布尔值时,如果发现一次转换的结果为,AND运算符停止并返回该假操作数的原始值;确实如此计算剩余的任何操作数。

考虑下面的伪代码。

(一些错误的表达)&&expr

这个快递部分是从未评估过因为第一个操作数(一些虚假的表达)被评估为虚伪的.如果快递是一个函数,该函数从未被调用。请参见以下示例:

js型
函数A(){console.log(“称为A”);返回false;}函数B(){console.log(“称为B”);返回true;}console.log(A()&&B());//由于调用函数A,将“调用A”记录到控制台,//&&求值为false(函数A返回false),然后将false记录到控制台;//AND运算符在此短路并忽略功能B

运算符优先级

AND运算符的优先级高于OR运算符,这意味着&&运算符在||操作员(参见运算符优先级).

js型
真||false&&false;//真的true&&(false|false);//(2 === 3) || (4 < 0) && (1 === 1); // 

示例

使用AND

以下代码显示了&&(逻辑与)操作员。

js型
a1=真&&true;//t&&t返回truea2=真&&假;//t&&f返回falsea3=假&真;//f&&t返回falsea4=假&&3===4;//f&&f返回falsea5=“猫”&“狗”;//t&&t返回“Dog”a6=假&&“猫”;//f&&t返回falsea7=“猫”&&false;//t&&f返回falsea8=“”&&false;//f&&f返回“”a9=假&&“”;//f&&f返回false

布尔值的转换规则

将AND转换为OR

以下操作涉及布尔运算:

js型
b条件1和&b条件2

始终等于:

js型
!(!b条件1||!b条件2)

将OR转换为AND

以下操作涉及布尔运算:

js型
b条件1||b条件2

始终等于:

js型
!(!b条件1&&!b条件2)

删除嵌套括号

由于逻辑表达式是从左到右求值的,所以只要遵循某些规则,就始终可以从复杂表达式中删除括号。

以下复合操作涉及布尔运算:

js型
b条件1||(b条件2&&b条件3)

始终等于:

js型
b条件1||b条件2&&b条件3

规格

规范
ECMAScript语言规范
#产品逻辑AND表达式

浏览器兼容性

BCD表仅在浏览器中加载

另请参见