update:case穿透的问题

This commit is contained in:
qianguyihao 2019-08-15 15:51:09 +08:00
parent 84a018ad67
commit 46f6572cef

View File

@ -221,42 +221,51 @@ switch语句也叫条件分支语句。
格式:
```javascript
switch(表达式) {
case 值1
语句体1;
break;
switch(表达式) {
case 值1
语句体1;
break;
case 值2
语句体2;
break;
case 值2
语句体2;
break;
...
...
...
...
default
语句体 n+1;
break;
}
default
语句体 n+1;
break;
}
```
备注1当所有的比较结果都为false时则只执行default里的语句。
备注2break可以省略但一般不建议。否则结果可能不是你想要的会出现一个现象**case穿透**。
### switch语句的执行流程
- 首先计算出表达式的值和case依次比较一旦有对应的值就会执行相应的语句在执行的过程中遇到break就会结束。
流程图如下:
- 然后如果所有的case都和表达式的值不匹配就会执行default语句体部分然后程序结束掉。
![](http://img.smyhvae.com/20190815_1500.jpg)
执行流程如下:
1首先计算出表达式的值和case依次比较一旦有对应的值就会执行相应的语句在执行的过程中遇到break就会结束。
2然后如果所有的case都和表达式的值不匹配就会执行default语句体部分。
### switch语句的结束条件
### switch语句的结束条件【非常重要】
- 情况a遇到break就结束而不是遇到default就结束。因为break在此处的作用就是退出switch语句
- 情况b执行到程序的末尾就结束。
我们来举两个例子就明白了。
我们来看下面的两个例子就明白了。
### case穿透的问题
switch 语句中的`break`可以省略,但一般不建议。否则结果可能不是你想要的,会出现一个现象:**case穿透**。
**举例1**case穿透的情况
@ -311,35 +320,34 @@ switch语句也叫条件分支语句。
```javascript
//switch判断语句
var number = 5;
switch (number) {
default:
console.log("我是defaul语句");
// break;
case (2):
console.log(number);
console.log("第二个呵呵:" + number);
//break;
case (3):
console.log(number);
console.log("第三个呵呵:" + number);
break;
case (4):
console.log(number);
console.log("第四个呵呵:" + number);
break;
}
```
上方代码的运行结果,你也许会意外:
```
我是defaul语句
5
5
第二个呵呵:5
第三个呵呵:5
```
上方代码的解释从这个例子可以看出switch语句结束与default无关。
上方代码的解释:代码走到 default时因为没有遇到 break所以会继续往下走直到遇见 break 或者走到程序的末尾。 从这个例子可以看出switch语句的结束与default的顺序无关。
## 我的公众号