为什么Javascript在表达式中返回数字而不是True / False?

11

今天在我的应用程序中涉及JavaScript代码时,我注意到了一些奇怪的东西。

var someVar = 25; 
var anotherVar = 50; 
var out = (anotherVar == 50 && someVar); 


console.log(out) // outputs 25 and not true or false;

你有任何想法发生了什么吗?


(anotherVar == 50 && someVar == 25)是什么意思? - Bharadwaj
1个回答

26
MDN的逻辑运算符页面所述,&&运算符:
返回expr1(如果可以转换为false);否则返回expr2。因此,当与布尔值一起使用时,&&如果两个操作数都为true,则返回true;否则返回false。
在您的情况下,expr1 (anotherVar == 50)是true(不是false),因此它返回expr2 (someVar),即25
它不返回truefalse,因为expr2不是布尔值。 ECMA-262规范指出:

&&|| 运算符产生的值不一定是布尔类型。产生的值始终是两个操作数表达式之一的值。


他可以使用'!!' (anotherVar == 50 && !!someVar) //true - Nitsan Baleli
3
顺便说一下,这就是为什么有时候会看到默认值的写法是 arg1 = arg1 || "default";(只要假值(比如 null 等)不是有效值)。 - Izkata

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接