为什么Javascript为表达式提供结果为Number而不是True/False?

Sne*_*sne 11 javascript

今天,当我发现一些奇怪的东西时,我在我的应用程序中使用JavaScript代码.

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


console.log(out) // outputs 25 and not true or false;
Run Code Online (Sandbox Code Playgroud)

知道发生了什么事吗?

Jam*_*lly 26

MDN的Logical Operators页面所述,&&运营商:

如果可以转换为false,则返回expr1; 否则,返回expr2.因此,当与布尔值一起使用时,&&如果两个操作数都为真,则返回true; 否则,返回false.

在您的情况下,expr1(anotherVar == 50)为true(非false),因此返回expr2(someVar),即25.

它不返回truefalse因为expr2不是布尔值.

ECMA-262规范说明:

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

  • 顺便说一下,为什么你有时会看到像`arg1 = arg1 ||那样的默认值 "default";`(只要false-y值(如`null`等)不是有效值) (3认同)