警钟长鸣 switch...case一定要记得写break或return
本帖最后由 steven026 于 2023-10-27 16:40 编辑***
> 记2023年10月27日,DreamNya(就是我),debug一个半小时把GPT4干限额都没查出原因,最后偶然发现原因是swtich...case没写break😖😖😖,警钟长鸣。
具体原理就不说了,反正记住case作用域一旦进入后,代码语句会忽略剩余的case条件一直运行直到break、return、throw语句出现或者swtich作用域结束为止,即使中间的case条件没有满足。
***
举个例子:
```js
switch(true){
case true:{
console.log(true)
}
case false:{
console.log(false)
}
default:{
console.log('警钟长鸣')
}
}
// 运行结果:ture, false, '警钟长鸣'
```
上述代码进入switch作用域后首先遇到case true条件,因为true==true,所以会首先进入true作用域输出`true`,之后代码会忽略所有case条件包括default,并连续输出`false`、`警钟长鸣`。
上述代码可以视作:
```js
switch(true){
case true:{
console.log(true)
console.log(false)
console.log('警钟长鸣')
}
}
```
要想让swtich...case正常工作,应该养成良好习惯,在每个case作用域末尾都加上break或return或throw语句,强制让代码退出。
正确代码如下
```js
switch (true) {
case true: {
console.log(true);
break;
}
case false: {
console.log(false);
break;
}
default: {
console.log('警钟长鸣');
}
}
// 运行结果:true
```
***
痛,真的是太痛了😭
如果有条件的话建议使用ESLint
这个规则是ESLint内置推荐规则
https://eslint.nodejs.cn/docs/latest/rules/no-fallthrough 哥哥来学go,go不用break/return 王一之 发表于 2023-10-27 16:03
哥哥来学go,go不用break/return
学不动了 学不动了
![](https://bbs.tampermonkey.net.cn/data/attachment/forum/202309/25/161953bgj2vmm8g2umf102.jpg) 来投入 Webstorm 的怀抱吧, Webstorm 会对 fallthrough 的 switch 弹出警告 (笑
页:
[1]