JavaScript:空字符串和false的奇怪行为返回空字符串。

6

今天我遇到了JavaScript的奇怪行为。以下是代码:

return "" && false

返回 ""。

为什么会这样表现?


2
falsy1 && falsy2 返回 falsy1 - 惰性计算。 - georg
因为 Boolean("") === false - Hacketo
我已经了解了惰性求值的概念,但我认为所有比较表达式都只会返回布尔值。谢谢你纠正我。 - Kamalakannan J
2个回答

2
因为:
逻辑与表达式:LogicalANDExpression && BitwiseORExpression 的计算过程如下:
1. 计算 LogicalANDExpression 的结果,得到 lref。 2. 获取 lref 的值,得到 lval。 3. 如果 ToBoolean(lval) 的结果为 false,则返回 lval。 4. 计算 BitwiseORExpression 的结果,得到 rref。 5. 返回 GetValue(rref) 的值。
这意味着:
如果第一个值为 falsy,则返回第一个值;如果第一个值为 truthy,则返回第二个值。 ECMAScript 5.1
这也是如果你执行以下操作看到的行为:
return false && true

你得到了 false
这也意味着这个。
return 23 && "Hello"

会给你“你好”。

只是想补充一下,由于这种行为,可以很容易地为函数参数分配默认值,例如:function setName(name) { name = name || "default name"; } - tytyryty
1
@tytyryty 虽然这是自然而然的,但ES6为我们提供了一种更清晰的方法来实现这一点:function setName(name = "default name") { ...。但对于非ES6,你当然是正确的。 - idmean

0

首先运行左侧,然后返回将您从函数中退出


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