JS:为什么switch语句`case 2`和`case day == 2`打印出相同的结果?

时间:2017-12-12 02:31:27

标签: javascript switch-statement

我理解以下代码。

var day = 2;
switch (day) {
    case 1:
        document.write("Monday");
        break;
    case 2:
        document.write("Tuesday!!");
        break;
    case 3:
        document.write("Wednesday");
        break;
    default:
        document.write("Another day");
}

打印出“星期二!!”。

但是,为什么以下工作没有?我虽然应该打印相同的答案,但它会继续打印“另一天”!?

var day = 2;
switch (day) {
    case day == 1:
        document.write("Monday");
        break;
    case day == 2:
        document.write("Tuesday!!");
        break;
    case day == 3:
        document.write("Wednesday");
        break;
    default:
        document.write("Another day");
}

2 个答案:

答案 0 :(得分:1)

switch语句中的一个case尝试直接与switch条件匹配。所以你的片段:

var day = 2;
switch (day) {
    case day == 1:
        document.write("Monday");
        break;
    case day == 2:
        document.write("Tuesday!!");
        break;
    case day == 3:
        document.write("Wednesday");
        break;
    default:
        document.write("Another day");
}

实际上相当于:

var day = 2;
switch (day) {
    case false:
        document.write("Monday");
        break;
    case true:
        document.write("Tuesday!!");
        break;
    case false:
        document.write("Wednesday");
        break;
    default:
        document.write("Another day");
}

由于day不等于truefalse(因为它实际上是2),因此切换到默认情况。

你可以看到案例使用来自the docs的严格平等(强调我的):

  

switch语句首先计算其表达式。然后寻找   第一个case子句,其表达式的计算结果与之相同   输入表达式的结果(使用严格比较,===)和   将控制转移到该子句,执行相关的语句。

答案 1 :(得分:0)

因为switch case语句会自动比较提供的参数。因此,在致电day == 3时,它实际上正在运行day == 3 == 3,这不是正确的语法。

希望明确你的疑虑。