switch分支语句合并相同功能的case语句

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tel13259437538/article/details/83314965

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 关键词来规定匹配不存在时做的事情。即匹配失败时默认要执行的代码。

猜你喜欢

转载自blog.csdn.net/tel13259437538/article/details/83314965