为什么在Javascript中切换和if语句对待布尔不同,困惑

时间:2013-04-20 06:06:58

标签: javascript if-statement switch-statement

我有一个开关,如果Javascript出现问题,代码就会跟随。

var a=0;

if(a){
    console.log("a is true");
} else if(!a) {
    console.log("a is false");
} else {
    console.log("a is not true or false");
}


switch(a){
    case true:
        console.log("switch... a is true");
        break;
    case false:
        console.log("switch... a is false");
        break;
    default:
        console.log("switch... a is not true or false");
}

当我运行上面的代码时,我在控制台中得到了结果,这让我很困惑:

a is false
switch... a is not true or false

我认为应该是这样的:

a is false
switch... a is false

有谁知道为什么会这样?非常感谢任何答案。

3 个答案:

答案 0 :(得分:4)

如果(!0)评估为真。一般来说,如果将评估为真,则存在任何非零的规则,反之亦然。

但是对于switch 0,将根据case值显式检查,0既不是true也不是false,因此默认语句被执行。

答案 1 :(得分:1)

0既不是真也不是假,但它是!a

答案 2 :(得分:1)

switch程序首先查找带有与表达式值匹配的标签的case子句,然后将控制转移到该子句。

由于a=0与以下任何一种情况都不匹配:truefalse。因此default被执行。

if-else如果指定的条件为真,则执行语句。如果条件为false,则可以执行另一个语句。

a=0以来,!a为真。 This是评估条件的方式。