我使用 JavaScript 一段时间了,但还有很多东西需要学习。
现在,我发现了一些关于Switch 语句的有趣事实。
我知道当你使用case someValue: without break;时 它在下一种情况下执行代码。
switch (x) {
case 0:
case 1:
doThis();
case 2:
doSomethingElse();
break;
}
Run Code Online (Sandbox Code Playgroud)
那么,什么时候x或0它1执行doThis(),甚至doSomethingElse(),但为什么呢?。
JavaScript 会把它解释成这样:
switch (x) {
case (0 == x || 1 == x):
doThis();
doSomethingElse();
break;
case (2 == x):
doSomethingElse();
break;
}
Run Code Online (Sandbox Code Playgroud)
或者它为每种情况创建代码块,直到出现 brek,如下所示:
switch (x) {
case 0: {
case 1: {
doThis();
case 2: {
doSomethingElse();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
陈述可能是这样的:(x === 0 && x == 0) || x === 1 && x == 1)
如果这是我展示的第一种情况,那么为什么当您在这些条件下编写它时它不起作用?我展示的第二种情况只是非常不清楚的想法,它是如何运作的。
有人可以向我解释一下吗?谢谢。
基本上,switch语句是具有三个通道的流程,其中一个通道是外部程序流,一个检查通道和一个案例通道。
一条语句会发生车道的更改case,该语句会严格检查true语句的表达式和子句的值,然后您将转到case 车道并保持不变,只要您未到达该语句或语句的末尾即可。陈述。switchcasebreakswitch
只要您仍在检查通道中,break其他检查之间或结束之间的任何语句都不会产生任何影响。
out lane lane
code side check case comment
--------------------- ----- ----- ---- -------------------------------------------------
v
switch (x) { v >>> v
case 0: ? >>> v if case is true, change lane
case 1: ? >>> v if case is true, change lane
doThis(); v v
case 2: ? >>> v if case is true, change lane
doSomethingElse(); v v
break; v <<<<<<<<<< . break statement, back to program flow
default: v ? >>> v change lane if value is not in other case clauses
v v
} v <<< . end of switch
v
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1075 次 |
| 最近记录: |