JavaScript OR(||)短路奇怪的行为

Aar*_*ias 0 javascript variables short-circuiting

我正在编写一个小函数,它接受一个参数并尝试调用parseInt(value) || value.toUpperCase()但是它无法按预期使用某些值.

function convert(value)
{
    return parseInt(value) || value.toUpperCase();
}
Run Code Online (Sandbox Code Playgroud)

一些示例输出是
convert("asdf") -> "ASDF"
convert("Car") -> "CAR"
convert("1") -> 1
convert("52") -> 52

但由于某种原因,当我输入"0"时,我得到"0"退出.我试图调用parseInt("0")并且它正确地解析0出来,但是当|| "0".toUpperCase()它与它结合时总是返回字符串"0".

唯一的借口,我能想出的是,0 || "0"总是要解决的"0",因为它处理0为未定义或为空(这我的理解是,短路计算的JavaScript才被短路undefined,nullfalse值).

我希望有人可以在这个问题上给我一些清晰的认识.

the*_*eye 5

0是假的,所以逻辑中的另一个表达式||将被评估.这就是你得到的原因"0".你可以这样确认

1 || console.log("First");
0 || console.log("Second");
# Second
Run Code Online (Sandbox Code Playgroud)

由于1是真实的,它短路并且不执行console.log("First"),但是0是假的因此它继续并执行console.log("Second")