我理解以下代码。
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");
}
答案 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
不等于true
或false
(因为它实际上是2
),因此切换到默认情况。
你可以看到案例使用来自the docs的严格平等(强调我的):
switch语句首先计算其表达式。然后寻找 第一个case子句,其表达式的计算结果与之相同 输入表达式的结果(使用严格比较,===)和 将控制转移到该子句,执行相关的语句。
答案 1 :(得分:0)
因为switch case语句会自动比较提供的参数。因此,在致电day == 3
时,它实际上正在运行day == 3 == 3
,这不是正确的语法。
希望明确你的疑虑。