← JavaScript条件判断语句if else JavaScript循环 →

JavaScript Switch语句

原创 2026-03-12 JavaScript 已有人查阅

深入浅出掌握JavaScript Switch Case,告别冗长if-else

大家好,欢迎来到代码号的编程教程。在日常编码中,我们经常需要根据不同的条件执行不同的代码块。对于初学者来说,if-else 是优选。但当你面对一堆“如果...否则如果...”时,代码会变得像意大利面条一样又长又乱,可读性直线下降。这时候,我们的主角——switch 语句就该闪亮登场了。

什么是JavaScript Switch Case?一个优雅的多路选择器

JavaScript 的 switch 语句就是一个多路分支选择器。它根据一个表达式的值,决定执行哪一段代码。你可以把它想象成一个老式电话交换台,一个电话打进来(表达式),接线员根据你拨的号码(case值),把你连接到正确的线路(执行相应的代码块)。

很多新手朋友会问:“我有 if-else 就够了,为什么还要用 switch?”

这个问题问得好。个人经验来看,switch 在处理“固定值”匹配时,比 if-else 更清晰、更专业

  • if-else 更擅长处理范围判断,比如“分数大于60”、“年龄小于18”。

  • switch 则专精于等值判断,比如“状态码是404”、“今天星期几”。

当你的代码中有一连串的 else if 都在比较同一个变量的不同值时,就是时候考虑用 switch 来重构了。它能让你的代码结构一目了然,减少出错的。

JavaScript Switch 语句的核心语法

我们先来看一下它的标准骨架,这在我们的编程教程板块里也是一个非常基础且重要的知识点。

switch (表达式) {
  case 值1:
    // 当表达式的值 === 值1 时,执行这里的代码
    break;
  case 值2:
    // 当表达式的值 === 值2 时,执行这里的代码
    break;
  // ... 可以有更多的 case
  default:
    // 如果表达式的值和所有 case 都不匹配,则执行这里的代码
}

这里有几个关键点,值得深入聊聊:

  1. 表达式 (Expression):它只会被计算一次。结果可以是任何数据类型,但是一个数字或字符串。

  2. case 标签:后面跟着一个值和一个冒号。这里用的是严格比较(===,意味着它不仅比较值,还比较数据类型。'1' 和 1 是不匹配的。

  3. break 关键字这是最容易出错的地方! break 用来“跳出”整个 switch 结构。如果一个 case 后面忘了写 break,程序就会“掉下去”,继续执行下一个 case 的代码,直到遇到 break 或 switch 结束。这就是所谓的“fall-through”。有时候我们会故意利用这个特性,但大多数情况下,忘记写 break 会导致逻辑错误。

  4. default 关键字:这是一个“保底”选项。如果所有 case 都不匹配,就会执行它。default 的位置很灵活,可以放在任何地方,甚至最前面,但建议习惯性放在,这样逻辑最清晰。即使你认为永远不会用到,写上 default 也是一个很好的编程习惯,可以帮你捕获意料之外的值。

从入门到实践:代码号带你玩转Switch

纸上得来终觉浅,我们来看几个在代码号学习编程过程中会遇到的典型例子。

示例1:基础用法——水果爱好者的选择

假设我们想根据用户喜欢的水果来回复不同的消息。

let favoriteFruit = 'banana';
let response;

switch (favoriteFruit) {
  case 'apple':
    response = '苹果富含维生素,是个健康的选择。';
    break;
  case 'banana':
    response = '香蕉能快速补充能量,运动后吃一根很不错!';
    break;
  case 'orange':
    response = '橙子满满的维C,能让你皮肤好好。';
    break;
  default:
    response = `抱歉,我们还没收录关于 ${favoriteFruit} 的知识。`;
}

console.log(response);
// 输出: 香蕉能快速补充能量,运动后吃一根很不错!

这个例子很直观。switch 检查 favoriteFruit 的值,找到了匹配的 'banana',执行对应代码后用 break 退出。

示例2:警惕!忘记 break 的后果

这是新手常踩的坑,我们来复现一下。

let httpStatus = 404;
let message;

switch (httpStatus) {
  case 200:
    message = 'OK - 请求成功';
    // 忘了写 break!
  case 404:
    message = 'Not Found - 资源不存在';
    // 忘了写 break!
  case 500:
    message = 'Internal Server Error - 服务器内部错误';
    break;
  default:
    message = '未知状态码';
}

console.log(message);
// 输出: Internal Server Error - 服务器内部错误
// 咦?结果怎么是500的错误?说好的404呢?

看到了吗?因为 case 200 和 case 404 后面都没有 break,程序在匹配到 404 后,没有退出,而是“穿透”下去,一路执行到 case 500 的代码块,直到遇到 break 才停下来。最终 message 被覆写了三次,输出了的结果。所以,除非你有意利用“穿透”特性,否则千万别忘了 break

示例3:故意“穿透”——处理共享逻辑

“穿透”也并非一无是处,当多个 case 需要执行相同的代码时,我们可以巧妙地利用它。

在我们的编程教程中,我们经常用这个例子来讲解成绩评级。

let score = 85;
let gradeLevel;

switch (true) { // 这里用了一个小技巧:switch (true)
  case score >= 90:
    gradeLevel = '优秀 (A)';
    break;
  case score >= 75:
    gradeLevel = '良好 (B)';
    break;
  case score >= 60:
    gradeLevel = '及格 (C)';
    break;
  default:
    gradeLevel = '不及格 (D)';
}

console.log(`你的成绩等级是:${gradeLevel}`); // 输出: 你的成绩等级是:良好 (B)

注意: 这个例子 switch (true) 是一个高级用法。case 后面跟的是布尔表达式。当 score >= 75 这个表达式的结果为 true 时,就匹配成功。虽然这拓宽了 switch 的使用场景,但从可读性上,个人更推荐用 if-else 来处理这种范围判断。

下面是一个更规范地利用“穿透”处理共享逻辑的例子:

let day = '周六';
let typeOfDay;

switch (day) {
  case '周一':
  case '周二':
  case '周三':
  case '周四':
  case '周五':
    typeOfDay = '工作日';
    break;
  case '周六':
  case '周日':
    typeOfDay = '周末';
    break;
  default:
    typeOfDay = '未知日期';
}

console.log(`${day}是${typeOfDay}`); // 输出: 周六是周末

这里,case '周一' 到 case '周五' 都没有自己的代码块,也没有 break,它们会“穿透”到下一个有代码的 case,即 typeOfDay = '工作日' 这一行,然后遇到 break 退出。这种方式非常简洁地处理了“多值单结果”的逻辑。

总结与个人建议

JavaScript 的 switch 语句是一个强大的工具,尤适合处理单变量多值匹配的场景。它让代码比冗长的 if-else 链更加清晰和易于维护。

本节课程知识要点:

  • 适用场景:当判断条件是基于同一个变量的多个固定值时,优先考虑 switch

  • 严格比较switch 使用 === 进行比较,注意数据类型。

  • break 的运用:除非有意设计“穿透”逻辑,否则每个 case 后都别忘记加 break

  • default 的兜底:总是不妨加上 default 分支,它是一个好习惯,能让你的代码更健壮。

如果你在编程学习过程中,特别是在代码号上查找资料时,发现自己的 if-else 快写成一本书了,不妨停下来想一想:“这里能不能用 switch 重构一下?” 你会惊喜地发现,代码瞬间清爽了许多。

← JavaScript条件判断语句if else JavaScript循环 →
分享笔记 (共有 篇笔记)
验证码:
微信公众号