我正在编写一个小函数,它接受一个参数并尝试调用parseInt(value) || value.toUpperCase()
,但它无法按预期使用某些值。
function convert(value)
{
return parseInt(value) || value.toUpperCase();
}
一些示例输出是
convert("asdf") -> "ASDF"
convert("Car") -> "CAR"
convert("1") -> 1
convert("52") -> 52
但出于某种原因,当我输入" 0"我得到" 0"退出。我试图调用parseInt("0")
并正确解析0
,但当与|| "0".toUpperCase()
结合使用时,它始终返回字符串"0"
。
我能提出的唯一理由是0 || "0"
始终解析为"0"
,因为它将0
视为未定义或null(我的理解是short-circuit evaluation的JavaScript仅与undefined
,null
或false
值短路。
我希望有人能就此问题向我提供一点清晰的说明。
答案 0 :(得分:5)
0
是假的,因此将评估逻辑||
中的另一个表达式。这就是你得到"0"
的原因。您可以像这样确认
1 || console.log("First");
0 || console.log("Second");
# Second
由于1
是真实的,它会短路并且不会执行console.log("First")
,但是0
是假的,所以它继续执行console.log("Second")
答案 1 :(得分:2)
我认为你真正想做的是:
return isNaN(value) ? value.toUpperCase() : parseInt(value);
说明:这会检查value
是否可以转换为Number
,然后返回相应的转化。
答案 2 :(得分:0)
正如您所陈述的那样,0
被视为虚假(它是假的)。因为它是假的,所以评估右边的表达式,"0"
的大写版本显然是相同的。
你到底想用|| value.toUpperCase()
做什么?