Javascript 为什么我会得到以下不同的答案
我得到以下代码的不同输出。请告诉我区别Javascript 为什么我会得到以下不同的答案,javascript,Javascript,我得到以下代码的不同输出。请告诉我区别 var y = 1; var c = "anything"; var d = 5; console.log(y == 1 && "anything"); // Output is anything console.log( "anything" && y == 1 ); // Outpu
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
与其他一些语言相比,
&&
和|
在JavaScript中的功能惊人地强大:它们不一定返回布尔值
&&
计算其第一个操作数,如果是falsy*,则将其用作返回值;如果第一个操作数求值为truthy*,&&
求值第二个操作数并将其用作结果值。在你的y==1&&“anything”
中,由于y==1
是true
(当然是truthy),因此结果是计算“anything”
(即“anything”
)的结果。在您的“anything”&&y==1
,“anything”
是真实的,因此结果是计算y==1
(即true
)的结果
|
的工作方式类似:它计算其第一个操作数,如果是真的,则将其用作结果值;否则,|
计算其第二个操作数,并将其用作结果值
*法尔西和特鲁西: falsy—当用作布尔值时强制为
false
的值。falsy值是:“
,0
,NaN
,null
,未定义
,当然还有false
。(在浏览器上,document.all
也是虚假的,原因很复杂。如果你真的很好奇,我会在我的书《JavaScript:新玩具》的第17章中介绍它。如果你感兴趣,我个人资料中的链接。)
truthy-当用作布尔值时强制为
true
。任何非伪值都是真值,包括“0”
(引号中为零)、“false”
(引号中为假)、空函数、空数组和空对象。&&
运算符将返回最后一个真值或假值。由于“anything”
为true,第一个表达式将返回“anything”
。在第二个表达式中,将首先计算y==1
,结果为true
,因此返回该值。由于执行不同的操作,您将获得不同的输出。“差异”是指执行操作的顺序。@deceze:可能有重复的地方,但该问题的答案不能回答该问题。这将有帮助:您还可以标记文档: