JavaScript switch...case 语句
在本教程中,你将学习如何使用 switch ... case
语句来测试或评估 JavaScript 中具有不同值的表达式。
JavaScript switch...case
语句
switch...case
语句表达了一种 if...else if...else
语句的替代,该语句做几乎同样的事情。switch...case
语句测试针对一系列值的变量或表达式,直到找到一个匹配,然后执行的代码对应于该匹配的块。它的语法是:
switch(x){
case value1:
// Code to be executed if x === value1
break;
case value2:
// Code to be executed if x === value2
break;
...
default:
// Code to be executed if x is different from all values
}
请考虑以下示例,该示例显示星期几的名称。
var d = new Date();
switch(d.getDay()) {
case 0:
alert("Today is Sunday.");
break;
case 1:
alert("Today is Monday.");
break;
case 2:
alert("Today is Tuesday.");
break;
case 3:
alert("Today is Wednesday.");
break;
case 4:
alert("Today is Thursday.");
break;
case 5:
alert("Today is Friday.");
break;
case 6:
alert("Today is Saturday.");
break;
default:
alert("No information available for that day.");
break;
}
getDay()
方法将工作日作为 0 和 6 之间的数字返回,其中 0 表示星期日。有关日期方法的详细信息,请参阅 JavaScript 日期和时间章节。
注意: 在 switch...case
语句中,使用严格相等操作符(===
) 将表达式或变量的值与 case 值进行比较。这意味着,如果 x = "0"
它不匹配 case 0:
,因为它们的数据类型不相等。
switch...case
语句不同于 if...else
语句的一个重要地方就是,switch
语句逐行执行(即逐个语句),一旦 JavaScript 找到一个 case
计算结果为 true
的子句,它不仅执行对应于该 case
子句的代码,而且还执行所有后续 case
子句,直到 switch
块结束为止。
为了防止这种情况,你必须在每个 case
之后包含一个 break
语句(如上例所示)。该 break
语句告诉 JavaScript 解释器在执行与第一个 true
case 相关联的代码后,跳出 switch...case
语句块。
然而,break
并不是在 case
或 default
中强制要求的在 switch 语句中的最后出现。虽然,使用 break
语句来中断最后的 case
或 default
子句是一种很好的编程习惯。它可以防止以后如果在 switch
语句后添加了另一个 case
语句,出现编程错误。
default
子句是可选的,它指定在 switch
表达式没有 case
匹配时要执行的操作。该 default
子句不必是出现在 switch 语句中的最后一个子句。这是一个例子,其中 default
不是最后一个子句。
var d = new Date();
switch(d.getDay()) {
default:
alert("Looking forward to the weekend.");
break;
case 6:
alert("Today is Saturday.");
break;
case 0:
alert("Today is Sunday.");
}
共享相同动作的多个 case
每个 case 值在 switch 语句中必须是唯一的。但是,不同的情况不需要具有独特的操作。有几种情况可以共享相同的操作,如下所示:
var d = new Date();
switch(d.getDay()) {
case 1:
case 2:
case 3:
case 4:
case 5:
alert("It is a weekday.");
break;
case 0:
case 6:
alert("It is a weekend day.");
break;
default:
alert("Enjoy every day of your life.");
}