为什么此开关返回错误的结果?

时间:2017-03-13 23:04:53

标签: javascript switch-statement break

所以这段代码当然有效:



<!DOCTYPE html>
<html>
<body>

<p id="demo"></p>

<script>
var day;
switch (new Date().getDay()) {
    case 0:
        day = "Sunday";
        break;
    case 1:
        day = "Monday";
        break;
    case 2:
        day = "Tuesday";
        break;
    case 3:
        day = "Wednesday";
        break;
    case 4:
        day = "Thursday";
        break;
    case 5:
        day = "Friday";
        break;
    case  6:
        day = "Saturday";
}
document.getElementById("demo").innerHTML = "Today is " + day;
</script>

</body>
</html>
&#13;
&#13;
&#13;

但没有break;语句,它不会:

&#13;
&#13;
<!DOCTYPE html>
<html>
<body>

<p id="demo"></p>

<script>
var day;
switch (new Date().getDay()) {
    case 0:
        day = "Sunday";
    case 1:
        day = "Monday";
    case 2:
        day = "Tuesday";
    case 3:
        day = "Wednesday";
    case 4:
        day = "Thursday";
    case 5:
        day = "Friday";
    case  6:
        day = "Saturday";
}
document.getElementById("demo").innerHTML = "Today is " + day;
</script>

</body>
</html>
&#13;
&#13;
&#13;

我想知道为什么它会显示&#34;星期六&#34;如果我省略休息声明,即使是星期六也不是这样,因为今天是星期二。 你知道为什么它会出现在案例6并输出星期六而不是什么时候省略break语句? 谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

您需要break语句的原因是因为switch的工作方式不同。当您有多个这样的条件时,它将从匹配开始,然后一直持续到结束或直到它被break中断。因此,对于星期二,实际的代码流是这样的:

case 2:
    day = "Tuesday";
    day = "Wednesday";
    day = "Thursday";
    day = "Friday";
    day = "Saturday";

最终得到Saturday。如果您在调试器中单步执行代码,则可以轻松看到这一点(例如,使用Chrome开发工具)。

如果您将break放在每个case的末尾,那么流程将如下所示:

case 2:
    day = "Tuesday";
    break;

你最终得到了Tuesday

答案 1 :(得分:0)

break是为了结束只应该针对该情况运行的语句的执行。 如果你没有中断,语句的执行将继续,直到它达到最后一个案例或默认情况。