精讲 JavaScript 的 "switch" 语句

简介: 精讲 JavaScript 的 "switch" 语句
+关注继续查看

"switch" 语句


switch 语句可以替代多个 if 判断。

switch 语句为多分支选择的情况提供了一个更具描述性的方式。


语法


switch 语句有至少一个 case 代码块和一个可选的 default 代码块。

就像这样:


switch(x) {
  case'value1':  // if (x === 'value1')
    ...
    [break]
  case'value2':  // if (x === 'value2')
    ...
    [break]
  default:
    ...
    [break]
}


  • 比较 x 值与第一个 case(也就是 value1)是否严格相等,然后比较第二个 casevalue2)以此类推。
  • 如果相等,switch 语句就执行相应 case 下的代码块,直到遇到最靠近的 break 语句(或者直到 switch 语句末尾)。
  • 如果没有符合的 case,则执行 default 代码块(如果 default 存在)。


举个例子


switch 的例子(执行 case 4 部分):


let a = 2 + 2;
switch (a) {
  case3:
    alert( 'Too small' );
    break;
  case4:
    alert( 'Exactly!' );
    break;
  case5:
    alert( 'Too large' );
    break;
  default:
    alert( "I don't know such values" );
}


这里的 switch 从第一个 case 分支开始将 a 的值与 case 后的值进行比较,第一个 case 后的值为 3 匹配失败。

然后比较 4。匹配,所以从 case 4 开始执行直到遇到最近的 break

如果没有 break,程序将不经过任何检查就会继续执行下一个 case

break 的例子:


let a = 2 + 2;
switch (a) {
  case3:
    alert( 'Too small' );
  case4:
    alert( 'Exactly!' );
  case5:
    alert( 'Too big' );
  default:
    alert( "I don't know such values" );
}


在上面的例子中我们会看到连续执行的三个 alert


alert( 'Exactly!' );
alert( 'Too big' );
alert( "I don't know such values" );


任何表达式都可以成为 switch/case 的参数


switchcase 都允许任意表达式。

比如:


let a = "1";
let b = 0;
switch (+a) {
  case b + 1:
    alert("this runs, because +a is 1, exactly equals b+1");
    break;
  default:
    alert("this doesn't run");
}


这里 +a 返回 1,这个值跟 caseb + 1 相比较,然后执行对应的代码。


"case" 分组


共享同一段代码的几个 case 分支可以被分为一组:

比如,如果我们想让 case 3case 5 执行同样的代码:


let a = 2 + 2;
switch (a) {
  case4:
    alert('Right!');
    break;
  case3: // (*) 下面这两个 case 被分在一组
  case5:
    alert('Wrong!');
    alert("Why don't you take a math class?");
    break;
  default:
    alert('The result is strange. Really.');
}


现在 35 都显示相同的信息。

switch/case 有通过 case 进行“分组”的能力,其实是 switch 语句没有 break 时的副作用。因为没有 breakcase 3 会从 (*) 行执行到 case 5


类型很关键


强调一下,这里的相等是严格相等。被比较的值必须是相同的类型才能进行匹配。

比如,我们来看下面的代码:


let arg = prompt("Enter a value?")
switch (arg) {
  case'0':
  case'1':
    alert( 'One or zero' );
    break;
  case'2':
    alert( 'Two' );
    break;
  case3:
    alert( 'Never executes!' );
    break;
  default:
    alert( 'An unknown value' )
}


  1. prompt 对话框输入 01,第一个 alert 弹出。
  2. 输入 2,第二个 alert 弹出。
  3. 但是输入 3,因为 prompt 的结果是字符串类型的 "3",不严格相等 === 于数字类型的 3,所以 case 3 不会执行!因此 case 3 部分是一段无效代码。所以会执行 default 分支。


作业题


先自己做题目再看答案。


1. 将 "switch" 结构重写为 "if" 结构


重要程度:⭐️⭐️⭐️⭐️⭐️

将下面 "switch" 结构的代码写成 if..else 结构:


switch (browser) {
  case'Edge':
    alert( "You've got the Edge!" );
    break;
  case'Chrome':
  case'Firefox':
  case'Safari':
  case'Opera':
    alert( 'Okay we support these browsers too' );
    break;
  default:
    alert( 'We hope that this page looks ok!' );
}


2. 将 "if" 结构重写为 "switch" 结构


重要程度:⭐️⭐️⭐️⭐

switch 重写以下代码:


let a = +prompt('a?', '');
if (a == 0) {
  alert( 0 );
}
if (a == 1) {
  alert( 1 );
}
if (a == 2 || a == 3) {
  alert( '2,3' );
}


答案:

在微信公众号「技术漫谈」后台回复 1-2-13 获取本题答案。

目录
相关文章
|
8月前
|
JavaScript 前端开发
JavaScript的break和continue语句的使用和区别
JavaScript的break和continue语句的使用和区别 JavaScript中break 和 continue都是用来控制循环结构,即用在for循环和while循环中。区别在于: break 语句用于跳出循环。 continue 用于跳过循环中的一个迭代。 1.break语句 break语句会终止循环并且跳出循环 for(var j=0;j<5;j++){ if(j==3){ break; } console.log(j);//0 1 2 }
|
8月前
|
JavaScript 前端开发
JavaScript的流程控制之if条件语句和switch选择语句(一)
JavaScript的流程控制(一) 接下来我么来讲一下JavaScript的流程控制,JavaScript中的流程控制主要包括条件语句和循环语句。这篇博客主要讲条件语句。说到条件语句主要包括if条件语句和switch选择语句两种。 1.if语句 //语法: // if(判断的条件){ // 条件成立时的执行代码 // } //if语句当条件不成立时,不执行任何的代码 var oDate=new Date(); console.log(oDate.getDay()); if(oDate.getDay()==6){
|
8月前
|
JavaScript 前端开发 Shell
开发中切忌使用的JavaScript语句 —— with语句 和 eval语句
开发中切忌使用的JavaScript语句 —— with语句 和 eval语句
66 0
|
8月前
|
JavaScript 前端开发 容器
前端(JavaScript)------运算符及分支语句、循环语句
先判断一个表达式的布尔值,然后根据布尔值的真伪,执行不同的语句。
42 0
|
9月前
|
JavaScript 前端开发
JavaScript入门之分支语句
引入 我们知道,当今世界丰富多彩的代码世界如果用语句来区分的话,不外乎三种: 顺序语句 分支语句 循环语句 正是这简简单单的三类控制语句,构成了花样繁多的程序世界。
|
9月前
|
前端开发 JavaScript
初学JavaScript&输出语句
前端三大件分别为:HTML、CSS、JavaScript。其中最重要的当属JavaScript。 虽然现在开发通常使用框架,但是这些基础的才最重要的,就像一座高楼不能没有稳固的地基一样。打好基础,走遍天下都不怕。JavaScript(简称“JS”) 是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。 即JavaScript 是一种编程语言,主要参与构建 Web 前端应用。
初学JavaScript&输出语句
|
11月前
|
前端开发 JavaScript
Web前端开发笔记——第四章 JavaScript程序设计 第四节 条件语句和循环语句
Web前端开发笔记——第四章 JavaScript程序设计 第四节 条件语句和循环语句
Web前端开发笔记——第四章 JavaScript程序设计 第四节 条件语句和循环语句
|
11月前
|
JavaScript 前端开发
JavaScript 代码结构:语句、分号和注释
JavaScript 代码结构:语句、分号和注释
98 0
JavaScript 代码结构:语句、分号和注释
|
11月前
|
JavaScript 前端开发
JS查漏补缺——with语句、eval函数
JS查漏补缺系列是我在学习JS高级语法时做的笔记,通过实践费曼学习法进一步加深自己对其的理解,也希望别人能通过我的笔记能学习到相关的知识点。这一次我们来了解with语句、eval函数
50 0
|
11月前
|
JavaScript
js输入输出语句
js输入输出语句
52 0
js输入输出语句
相关产品
云迁移中心
推荐文章
更多