Write By Monkeyfly
以下内容均为原创,如需转载请注明出处。
前提
描述:
switch 语句用于:根据一个变量的不同取值,来执行不同的代码。
语法:
switch(n)
{
case 1:
执行代码块 1
break;
case 2:
执行代码块 2
break;
default:
如果以上条件都不满足,则执行该代码;
}
如果多个 case
语句都执行相同的功能代码时,应该怎么处理呢?【可以做如下理解】
- 如何给
case
语句传多个值? switch
分支结构中一个case
语句可以跟多个值吗?switch
语句中 相同的case
能合并么?
实现
我的写法如下:【错误写法】
switch(month){
case 1 || 3 || 5 || 7 || 8|| 10 ||12:
console.log(month+"月有31天");
break;
case 4 || 6 ||9 ||11:
console.log(month+"月有30天");
break;
default:
console.log(month+"月有28天");
}
于是我就习惯性的使用了 JavaScript
中的逻辑运算符 || (或)
来实现的。
注:逻辑运算符用于测定变量或值之间的逻辑。
发现问题
刚开始写的时候没注意这个写法有没有问题,因为自己也是第一次这么写。
今天在测试功能时,经过调试才发现了该问题:当变量的值符合 这个 case
语句中的表达式判断时,它并没有执行该 case
语句,而是直接执行了 default
语句。
当错误发生的时候,我才意识到:有可能是当初 case 语句 的表达式判断写的有问题。如果多个变量的取值都对应同一种处理情况时,我选择了使用 逻辑运算符 || (或)来实现。写的时候也不知道对错,凭印象写的。
解决问题
- 经过百度搜索一番才发现,并不是这么干的。原来是语法写错了,根本就没有我那样的写法。
- 从搜索结果来看,有不少小伙伴都有过我这种类似的写法,看来这个现象还是会经常发生的,一不留神就写错了。
- 究其根本,还是对基础语法掌握的不熟练,否则怎么可能犯这种低级的错误呢?
正确的书写语法如下:
switch(month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
console.log(month+"月有31天");
break;
case 4:
case 6:
case 9:
case 11:
console.log(month+"月有30天");
break;
default:
console.log(month+"月有28天");
}
看到这,我才恍然大悟, 合并多个相同功能的 case 语句
原来是这么写的。
//这才是正确的写法
case 1:
case 3:
case 5 :
case 7:
//code...
break;
结束语
至此,问题就已经被解决了。
switch
结构说明:
switch、case、break、default
都是系统关键字,都必须全小写。switch
后的小括号( )
:小括号内一般是一个变量名,这个变量可能会有不同的取值。- 每个
case
的值都会与变量的值进行对比,看是否相等,如果一致就执行该case
语句对应的代码。 - 所有的
case
都是“或”(or)
的关系,每时每刻只有一个case
会满足条件。 - 每个
case
中的代码执行完毕后,必须要用break
语句来阻止代码自动地向下一个case
运行。 - 如果不写
break
语句的话,下面所有的case
语句都会执行一遍。 - 请使用
default
关键词来规定匹配不存在时做的事情。可省略不写。
switch
工作原理:
- 首先设置表达式
n
(通常是一个变量)。 - 随后表达式的值会与结构中的每个
case
的值做比较。如果存在匹配,则与该case
关联的代码块会被执行。 - 请使用
break
来阻止代码自动地向下一个case
运行。 - 请使用
default
关键词来规定匹配不存在时做的事情。即匹配失败时默认要执行的代码。