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 并不是在 casedefault 中强制要求的在 switch 语句中的最后出现。虽然,使用 break 语句来中断最后的 casedefault 子句是一种很好的编程习惯。它可以防止以后如果在 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.");
}