JavaScript switch 语句
switch 是 JavaScript 中的一种条件语句,用于根据不同的条件执行不同的操作。
switch
是 JavaScript 中的一种条件语句,用于根据不同的条件执行不同的操作。
switch 语法
switch
和 if ... else
语句类似,不同的是,switch
只对一个表达式的结果进行评估,根据表达式不同的运算结果,选择执行不同的 case
子句。
switch (expression) {
case x:
// 当表达式结果为 x 时,执行这里的代码
break;
case y:
// 当表达式结果为 y 时,执行这里的代码
break;
default:
// 当表达式结果匹配不到 case 时,默认执行的代码
}
switch
的工作原理为:
- 首先计算
switch
表达式的结果。 - 将表达式的结果与每个
case
的值进行比较。 - 如果找到对应的
case
,则执行此case
代码块。如果遇到break
则跳出switch
,否则继续执行下一个case
代码块,知道遇到break
。 - 如果没有对应的
case
,则执行default
代码块。
每个 case
代表了一种表达式可能的计算结果,default
则代表了默认的情况,找不到相应的 case 的时候执行 default
。
以下示例,通过 switch 返回当前日期时星期几:
switch (new Date().getDay()) {
case 0:
day = "星期日";
break;
case 1:
day = "星期一";
break;
case 2:
day = "星期二";
break;
case 3:
day = "星期三";
break;
case 4:
day = "星期四";
break;
case 5:
day = "星期五";
break;
case 6:
day = "星期六";
}
break 关键字
当 JavaScript 遇到 break
关键字时,它会跳出 switch 块。
如果匹配的 case 代码块运行结束后没有遇到 break
,则会执行下一个 case 代码块,一直到遇到 break 跳出或者运行到最后。所以如果忽略了 break
,则可能会与自己的预期不相同。
最后一个 case 代码块后者 default 代码块可以省略 break
,因为他们已经是最后的代码段了。
可以在浏览器控制台中试一下下面的忘记了 break
的函数:
function test(x) {
switch (x) {
case 1:
console.log("1");
case 2:
console.log("2");
default:
console.log("not 1 and 2");
}
}
当我们执行 test(1)
的时候,浏览器控制台的输出如下:
1
2
not 1 and 2
这就是忘了 break
的后果。
default 关键字
default
代码块是 swtich 表达式结果匹配不到对应的 case 时, 默认要执行的代码块。
getDay()
方法将工作日作为 0 到 6 之间的数字返回。
下面的例子中当前日期如果不是周六或者周日,显示一条默认消息:
switch (new Date().getDay()) {
case 6:
text = "今天是星期六";
break;
case 0:
text = "今天是星期日";
break;
default:
text = "如果今天是周末多好啊!";
}
default
代码块不一定放在最后:
switch (new Date().getDay()) {
default:
text = "如果今天是周末多好啊!";
break;
case 6:
text = "今天是星期六";
break;
case 0:
text = "今天是星期日";
}
如果 default
不是 switch 块中的最后一种情况,以 break
结束。
通用代码块
我们还可以让多个 case 使用相同的逻辑操作。
在此示例中,当前日期如果是周六或者周日,显示相同的信息:
switch (new Date().getDay()) {
case 0:
case 6:
text = "今天是周末,太棒了!";
break;
default:
text = "如果今天是周末多好啊!";
}
严格比较
Switch case 使用的是严格比较 (===
)。
严格比较不但要比较值的内容,还要比较值的类型。只要值和类型都匹配的时候,才能评估通过。
在这个例子中,x 将不匹配:
let x = "0";
switch (x) {
case 0:
text = "Off";
break;
case 1:
text = "On";
break;
default:
text = "No value found";
}