这个逻辑与(&&
)一组布尔操作数的(逻辑合取)运算符将是真的
当且仅当所有操作数都是真的
。否则将是假
.
更一般地,操作符返回第一个虚伪的从左到右求值时遇到的操作数,或最后一个操作数的值(如果都是)真实的.
逻辑与(&&
)从左到右计算操作数,立即返回第一个操作数的值虚伪的遇到的操作数;如果所有值都是真实的,返回最后一个操作数的值。
如果值可以转换为真的
,该值就是所谓的真实的。如果值可以转换为假
,该值就是所谓的虚伪的.
可以转换为false的表达式示例如下:
假
;
无效的
;
硝酸钠
;
0
;
- 空字符串(
""
或''
或``
);
未定义
.
AND运算符保留非布尔值并按原样返回它们:
result=“”&&“foo”;//结果被赋值为“”(空字符串)结果=2&&0;//结果赋值为0result=“foo”&&4;//结果分配为4
尽管&&
运算符可以与非布尔操作数一起使用,它仍然被视为布尔运算符,因为其返回值可以始终为转换为布尔基元.要显式地将其返回值(或任何一般表达式)转换为相应的布尔值,请使用双精度NOT运算符或布尔值
构造函数。
逻辑AND表达式是一个短路运算符。当每个操作数转换为布尔值时,如果发现一次转换的结果为假
,AND运算符停止并返回该假操作数的原始值;确实如此不计算剩余的任何操作数。
考虑下面的伪代码。
(一些错误的表达)&&expr
这个快递
部分是从未评估过因为第一个操作数(一些虚假的表达)
被评估为虚伪的.如果快递
是一个函数,该函数从未被调用。请参见以下示例:
函数A(){console.log(“称为A”);返回false;}函数B(){console.log(“称为B”);返回true;}console.log(A()&&B());//由于调用函数A,将“调用A”记录到控制台,//&&求值为false(函数A返回false),然后将false记录到控制台;//AND运算符在此短路并忽略功能B
AND运算符的优先级高于OR运算符,这意味着&&
运算符在||
操作员(参见运算符优先级).
真||false&&false;//真的true&&(false|false);//假(2 === 3) || (4 < 0) && (1 === 1); // 假
以下代码显示了&&
(逻辑与)操作员。
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
以下操作涉及布尔运算:
始终等于:
将OR转换为AND
以下操作涉及布尔运算:
始终等于:
由于逻辑表达式是从左到右求值的,所以只要遵循某些规则,就始终可以从复杂表达式中删除括号。
以下复合操作涉及布尔运算:
始终等于:
BCD表仅在浏览器中加载