Menu Close

JavaScript switch 语句

switch 语句可以替代多个 if 检查。

switch 语句评估一个 expression,将其结果与 case 值进行比较,并执行与匹配值关联的 case 语句。如果学习过C语言,很容易了解该语句。C语言的switch 语句和嵌套switch语句

下面说明了 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 语句
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 语句的例子。

let a = 2 + 2;

switch (a) {
  case 3:
    alert( 'Too small' );
    break;
  case 4:
    alert( 'Exactly!' );
    break;
  case 5:
    alert( 'Too big' );
    break;
  default:
    alert( "I don't know such values" );
}

这里,switch 从第一个 case 变体(即 3)开始比较 a。匹配失败。

接着是 4。匹配成功,因此执行从 case 4 开始,直到遇到最近的 break

如果没有 break,则执行会继续进入下一个 case,而不进行任何检查。

以下是一个没有 break 的例子:

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

alert( 'Exactly!' );
alert( 'Too big' );
alert( "I don't know such values" );

switch/case 后面参数可以使用任意表达式

switchcase 后面参数允许使用任意表达式。

例如:

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 进行比较,然后执行对应的代码。

READ  JavaScript 数据类型

分组case

多个 case 如果要共享相同的代码,可以进行分组。

例如,如果我们希望 case 3case 5 执行相同的代码:

let a = 3;

switch (a) {
  case 4:
    alert('Right!');
    break;

  case 3: // (*) grouped two cases
  case 5:
    alert('Wrong!');
    alert("Why don't you take a math class?");
    break;

  default:
    alert('The result is strange. Really.');
}

现在,3 和 5 都会显示相同的消息。

这种“分组” case 的能力是 switch/case 在没有 break 时执行机制的一个副作用。在这里,case 3 的执行从标记为 (*) 的那一行开始,并继续执行到 case 5,因为中间没有 break

数据类型很重要

需要强调的是,switch 中的相等比较始终是严格的。要匹配,值必须是相同的类型。

例如,来看下面的代码:

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' );
}

对于 0 和 1,会执行第一个 alert
对于 2,会执行第二个 alert
但对于 3,prompt 的结果是字符串 "3",它与数字 3 在严格相等(===)的比较中不相等。因此,case 3 是无效代码!将会执行 default 分支。

除教程外,本网站大部分文章来自互联网,如果有内容冒犯到你,请联系我们删除!
Posted in JavaScript 基础

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Leave the field below empty!