为什么switch和if语句在Javascript中对待布尔值不同,令人困惑

Why switch and if statement in Javascript treat boolean different, confused

本文关键字:布尔值 if switch 语句 Javascript 为什么      更新时间:2023-09-26

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

有人知道为什么会这样吗?非常感谢大家的回答。

If(!0)的值为true。一般来说,if中任何非零的值都将计算为true,反之亦然。

但是对于switch 0将显式地检查大小写值,并且0既不是真也不是假,因此执行默认语句

0既不为真也不为假,但是

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

因为a=0不匹配truefalse。因此执行default

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

因为a=0,所以!a为真。这就是条件的计算方法。