switch
语句能够替代多个 if
判断。javascript
switch
语句为多分支选择的状况提供了一个更具描述性的方式。html
switch
语句有至少一个 case
代码块和一个可选的 default
代码块。java
就像这样:react
switch(x) {
case 'value1': // if (x === 'value1')
...
[break]
case 'value2': // if (x === 'value2')
...
[break]
default:
...
[break]
}
复制代码
x
值与第一个 case
(也就是 value1
)是否严格相等,而后比较第二个 case
(value2
)以此类推。switch
语句就执行相应 case
下的代码块,直到遇到最靠近的 break
语句(或者直到 switch
语句末尾)。default
代码块(若是 default
存在)。switch
的例子(执行 case 4
部分):微信
let a = 2 + 2;
switch (a) {
case 3:
alert( 'Too small' );
break;
case 4:
alert( 'Exactly!' );
break;
case 5:
alert( 'Too large' );
break;
default:
alert( "I don't know such values" );
}
复制代码
这里的 switch
从第一个 case
分支开始将 a
的值与 case
后的值进行比较,第一个 case
后的值为 3
匹配失败。学习
而后比较 4
。匹配,因此从 case 4
开始执行直到遇到最近的 break
。this
若是没有 break
,程序将不通过任何检查就会继续执行下一个 case
。spa
无 break
的例子:code
let a = 2 + 2;
switch (a) {
case 3:
alert( 'Too small' );
case 4:
alert( 'Exactly!' );
case 5:
alert( 'Too big' );
default:
alert( "I don't know such values" );
}
复制代码
在上面的例子中咱们会看到连续执行的三个 alert
:cdn
alert( 'Exactly!' );
alert( 'Too big' );
alert( "I don't know such values" );
复制代码
switch/case
的参数switch
和 case
都容许任意表达式。
好比:
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
,这个值跟 case
中 b + 1
相比较,而后执行对应的代码。
共享同一段代码的几个 case
分支能够被分为一组:
好比,若是咱们想让 case 3
和 case 5
执行一样的代码:
let a = 2 + 2;
switch (a) {
case 4:
alert('Right!');
break;
case 3: // (*) 下面这两个 case 被分在一组
case 5:
alert('Wrong!');
alert("Why don't you take a math class?");
break;
default:
alert('The result is strange. Really.');
}
复制代码
如今 3
和 5
都显示相同的信息。
switch/case
有经过 case 进行“分组”的能力,实际上是 switch 语句没有 break
时的反作用。由于没有 break
,case 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;
case 3:
alert( 'Never executes!' );
break;
default:
alert( 'An unknown value' )
}
复制代码
prompt
对话框输入 0
、1
,第一个 alert
弹出。2
,第二个 alert
弹出。3
,由于 prompt
的结果是字符串类型的 "3"
,不严格相等 ===
于数字类型的 3
,因此 case 3
不会执行!所以 case 3
部分是一段无效代码。因此会执行 default
分支。先本身作题目再看答案。
重要程度:⭐️⭐️⭐️⭐️⭐️
将下面 "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!' );
}
复制代码
重要程度:⭐️⭐️⭐️⭐
用 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
获取本题答案。
现代 JavaScript 教程:开源的现代 JavaScript 从入门到进阶的优质教程。React 官方文档推荐,与 MDN 并列的 JavaScript 学习教程。
在线免费阅读:zh.javascript.info
扫描下方二维码,关注微信公众号「技术漫谈」,订阅更多精彩内容。