我为以下代码获得了不同的输出。请告诉我差异
var y = 1;
var c = "anything";
var d = 5;
console.log(y == 1 && "anything"); // Output is anything
console.log( "anything" && y == 1 ); // Output is true
答案 0 :(得分:2)
&&
和||
非常强大:它们不一定会返回布尔值。
&&
计算它的第一个操作数,如果那是假的*,则使用它作为返回值;如果第一个操作数evalutes truthy *,&&
计算其第二个操作数并将其用作结果值。在y == 1 && "anything"
中,由于y == 1
为true
(当然,这是真实的),结果是评估"anything"
的结果("anything"
)。在"anything" && y == 1
中,"anything"
是真实的,因此结果是评估y == 1
(true
)的结果。
||
以类似的方式工作:它评估它的第一个操作数,如果这是真实的,则使用它作为结果值;否则,||
计算其第二个操作数使用其作为结果值。
* falsy and truthy:
falsy - 用作布尔值时强制为false
的值。虚假值包括:""
,0
,NaN
,null
,undefined
,当然还有false
。
truthy - 用作布尔值时强制为true
的值。任何非虚假的价值都是真实的,包括。 "0"
(引号为零),"false"
(引号中为false),空函数,空数组和空对象。