javascript - 为什么 switch 和 if 语句在 Javascript 中对待 boolean 不同,困惑

标签 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

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

最佳答案

If (!0) 计算结果为真。通常有一条规则,如果 if 中的任何非零值都将计算为真,反之亦然。

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

关于javascript - 为什么 switch 和 if 语句在 Javascript 中对待 boolean 不同,困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16117274/

相关文章:

javascript - TypeScript:循环 JSON 并匹配给定的数组

javascript - 纠结于如何检测 JSON 中的用户机器人并返回具有给定条件的用户

javascript - 我可以在 Javascript 中打开一个新窗口并单击该窗口中的一个元素吗?

c++ - Switch case 语句如何在内部实现或工作?

java - switch语句有帮助吗?

javascript - 我正在获取图像的 ListView ,而不是以网格格式显示

c++ - 在 IF 语句条件内循环

javascript "less than"如果语句失败

php - 根据从下拉菜单中选择的值,不输出正确的回波

javascript - 跳出 while 循环并一次性切换