switch

2018-02-24大约6分钟

使用ifelse if语句可以检查多个条件,如果第一个条件false,则检查第二个,如果仍未false,则继续检查下一个,依此类推。当要判断某个变量与许多可能的值时,仍用if和else if会使代码变得比较臃肿,这时有一个更高效的替代方案,就是switch语句。

switch语句

先来看一段示例代码:红灯停,绿灯行,黄灯亮了等一等


const lightColor = "red";

switch (lightColor) {  // ()里面检查变量表达式的值
    case "green":          // 检查可能的值,如果匹配,则执行下面的代码,知道遇到break为止
        console.log("可以通行");
        break;
    case "yellow":         // 上面不匹配,执行第二个case
        console.log("等等");
        break;
    case "red":               // 上面不匹配,执行第三个case
        console.log("禁止通行");
        break;
    default:                   // 找到匹配,且执行了break语句,则不再执行后面代码
        console.log("未知交通灯颜色,暂停使用");
        break;
}

switch语句就是“将代码切换到条件匹配的分支处”。switch语句有4个重要的元素:

  • 测试表达式
  • case语句
  • break语句
  • default语句

测试表达式放在switch关键字后面的()中,不只可以放变量,也可以放任意有效的表达式。

接下来是case语句,case语句检查条件。为了说明case语句属于switch语句,必须把它们放到测试表达式后的{}中。

break语句表示执行到此之后应该跳出switch语句,不应该再执行switch语句后面的代码。

最后是default语句。顾名思义,它表示其他的case语句都不匹配时要执行的代码。default语句不是必须的,没有默认要执行的代码的时候,就可以不用default语句。一般情况下,最好包含一个default语句,防止遗漏可能的选项,把这种意料之外的信息打印出来,可以帮助万一程序出错时做错误分析。

一定不要忘记在每个case语句块的最后加上break语句,除非是故意这么做的。

不同的case执行相同的代码

有时候,相同的case的执行的代码是一样的,这种情况下可以这样写代码,请留意注释部分:

const color = "green";

switch (color) {
    case "green":
    case "blue":
    case "purple":
        console.log("冷色系颜色"); // green、blue和purple共用一个case代码
    case "red":
    case "orange":
    case "yellow":
        console.log("暖色系颜色"); // 其他的颜色也共用一个case代码
}

代码执行什么结果?

傻瓜作者,代码有错误你看不出来啊?

不好意思,犯了一个初学者很容易忽略的错误,上面代码少了break!,马上修改,同时也完善一个default

const color = "green";

switch (color) {
    case "green":
    case "blue":
    case "purple":
        console.log("冷色系颜色"); // green、blue和purple共用一个case代码
        break;
    case "red":
    case "orange":
    case "yellow":
        console.log("暖色系颜色"); // 其他的颜色也共用一个case代码
        break;
    default:
        console.log("我不懂你说的颜色是什么系的");
}

可以试试修改代码中color变量的值,然后重新运行看结果。