1

我有一个开关,如果 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

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

4

3 回答 3

4

如果 (!0) 评估为真。通常有一个规则,任何非零的 if 将评估为真,反之亦然。

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

于 2013-04-20T06:13:02.243 回答
1

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

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

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

因为a=0,所以!a是真的。就是评估条件的方式。

于 2013-04-20T06:17:08.887 回答
1

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

于 2013-04-20T06:09:19.387 回答