【发布时间】:2014-04-10 16:12:38
【问题描述】:
我正在编写一个小函数,它接受一个参数并尝试调用parseInt(value) || value.toUpperCase(),但它无法按预期使用某些值。
function convert(value)
{
return parseInt(value) || value.toUpperCase();
}
一些示例输出是convert("asdf") -> "ASDF"convert("Car") -> "CAR"convert("1") -> 1convert("52") -> 52
但由于某种原因,当我输入“0”时,我得到了“0”。我尝试调用parseInt("0"),它正确解析出0,但是当与|| "0".toUpperCase()结合使用时,它总是返回字符串"0"。
我能想出的唯一借口是0 || "0" 总是解析为"0",因为它将0 视为未定义或null(我的理解是JavaScript 的short-circuit evaluation 只是与@987654336 短路@、null 或 false 值)。
我希望有人可以就这个问题为我提供一点澄清。
【问题讨论】:
-
0的值是假的。虚假值列表是0、""、undefined、null和NaN。 (这不包括false;它是否“虚假”是一个哲学问题:) -
看来您已经自己回答了这个问题。尽管
0不被视为undefined,而是 likeundefined和任何其他虚假值。 -
防止
||短路的值是0nullundefinedNaN""false。任何其他值都会触发短路并阻止对第二个操作数的评估。 -
更多关于 Falsy 值的阅读。 sitepoint.com/javascript-truthy-falsy
-
感谢@Adoba 提供了一个很棒的链接。分享的文章很有见地。
标签: javascript variables short-circuiting