在本教程中,您将学习如何使用 JavaScript switch 语句根据多个条件执行分支语句。

JavaScript switch case 语句简介

switch 语句评估一个 expression,将其结果与 case 值进行比较,并执行与匹配值关联的 case 语句。

下面说明了 switch 语句的语法:

switch (expression) {
    case value1:
        statement1;
        break;
    case value2:
        statement2;
        break;
    case value3:
        statement3;
        break;
    default:
        statement;
}

让我们看看代码是如何运行的。

  • 首先,评估 switch 关键字后面括号内的 expression
  • 其次,将表达式的结果从上到下 与 case 分支中 value1,  value2, …进行比较。值得注意的是,switch 语句使用严格比较 ===
  • 第三,expression 执行结果等于 case 关键字后面的值时,执行 case 分支中的语句。break 表示语句退出 switch 语句。如果分支没有 break 语句,代码执行将进入下一个 case 分支。如果 expression 的结果不严格等于任何值,switch 声明将会执行 default 分支的语句。

只要找到匹配项,switch 语句就会停止将 expression 的结果与剩余 case后面的值进行比较。switch 语句类似于if...else...if语句。但它具有更易读的语法。

以下流程图说明 switch 语句执行流程:

javascript switch

在实践中,你经常使用一个 switch 语句来代替一个复杂的 if...else...if 语句来使代码更具可读性。

从技术上讲,switch 语句等同于以下  if...else...if 语句:

if (expression === value1) {
  statement1;
} else if (expression === value2) {
  statement2;
} else if (expression === value3) {
  statement3;
} else {
  statement;
}

JavaScript switch 示例

让我们举一些使用 JavaScript switch 语句的例子。

JavaScript switch 语句获取星期几

以下示例使用 switch 语句根据天数获取星期几:

let day = 3;
let dayName;

switch (day) {
  case 1:
    dayName = 'Sunday';
    break;
  case 2:
    dayName = 'Monday';
    break;
  case 3:
    dayName = 'Tuesday';
    break;
  case 4:
    dayName = 'Wednesday';
    break;
  case 5:
    dayName = 'Thursday';
    break;
  case 6:
    dayName = 'Friday';
    break;
  case 7:
    dayName = 'Saturday';
    break;
  default:
    dayName = 'Invalid day';
}

console.log(dayName); // Tuesday

输出:

Tuesday

看看代码是如何运行。

首先,声明保存日期编号的日期变量和日期名称变量 (dayName)。

其次,使用 switch 语句根据天数获取星期几。如果 day 是 1,则该日是周末的Sunday。如果天是 2,则是Monday,依此类推。

第三,将星期几打印到控制台。

JavaScript switch 语句获取基于月份的天数

以下示例使用switch语句获取一个月的天数:

let year = 2016;
let month = 2;
let dayCount;

switch (month) {
  case 1:
  case 3:
  case 5:
  case 7:
  case 8:
  case 10:
  case 12:
    dayCount = 31;
    break;
  case 4:
  case 6:
  case 9:
  case 11:
    dayCount = 30;
    break;
  case 2:
    // leap year
    if ((year % 4 == 0 && !(year % 100 == 0)) || year % 400 == 0) {
      dayCount = 29;
    } else {
      dayCount = 28;
    }
    break;
  default:
    dayCount = -1; // invalid month
}

console.log(dayCount); // 29

在这个例子中,我们有四种情况:

  • 如果月份是 1、3、5、7、8、10 或 12,则一个月的天数是 31。
  • 如果月份为 4、6、9 或 11,则该月的天数为 30。
  • 如果月份为2,年份不是闰年,则天数为 28。如果年份为闰年,则天数为 29。
  • 如果月份不在有效范围(1-12)内,则 default 分支被执行并将 dayCount 变量设置为-1,表示无效月份。

结论

  • switch 语句计算一个表达式,将其结果与 case 值进行比较,并执行与匹配关联语句。
  • 使用 switch 语句而不是复杂的 if...else...if 语句使代码更可阅读。
  • switch 语句使用严格比较 ===expressioncase 值进行比较。