If-Else 还是 Switch-Case:选择哪一个?

2025-06-07

If-Else 还是 Switch-Case:选择哪一个?

本文最初发表于Dasha

如果您感兴趣的话,Dasha 是一个对话式 AI 即服务平台,可让您将逼真的语音和文本对话功能嵌入到您的应用或产品中。立即免费开始构建!


如果您是编程和 JavaScript 的新手,您可能会对使用哪种条件语句感到困惑,尤其是在 if-else 和 switch-case 语句之间。

我第一次学习条件语句的时候,觉得它很简单,用 if-else 或 switch 语句都可以。但是,当我进一步了解这个主题,并尝试将其应用于一些问题时,我开始困惑,不知道应该使用哪一个,它们之间到底有什么区别,以及如何选择正确的语句。

FDCKZ2RWYAIMx_2.jpeg

我努力理解这两个条件语句的区别和应用,并深入研究了这个主题。

在本文中,我将解释这两个概念并提供比较图表,以便您了解如何根据复杂程度在不同场景中使用 if-else 和 switch-case。

在深入细节之前,让我们先回顾一下为什么在程序中使用条件语句。

作为人类,我们时刻都在做出各种影响生活的决定。例如,如果我们有空闲时间,就必须决定做什么:是休息、看点什么、给别人打电话,还是做一些有意义的事情。

条件语句允许我们根据 JavaScript 中的条件做出这样的决定。如果条件为真,我们可以执行一个操作;否则,我们可以执行另一个操作。

因此,if-else 和 switch-case 都允许我们根据条件做出这些决定。如果你想复习一下条件判断的工作原理,请查看这篇MDN 文章

if-else 和 else-if 语句

作为新手,我们都喜欢 if-else 语句!😂

if-else-矩阵.gif

If-else 语句接受特定条件,并检查该条件是否为真。如果条件为真,则该if语句执行特定的代码块。如果条件为假,则该else语句执行不同的代码块。

让我们举一个简单的例子来了解它是如何工作的。

场景一

假设您是五年级 C 班的班主任。您需要根据学生的成绩检查他们的成绩,并且只需要检查该学生是通过还是未通过。让我们使用 if-else 语句根据学生的成绩检查其中一名学生的成绩。



function studentGrade(marks) {
  if (marks >= 50) {
    return "You have passed the exam! 🥳";
  } else {
    return "You have failed the exam!";
  }
}

console.log(studentGrade(75)); // "You have passed the exam! 🥳"


Enter fullscreen mode Exit fullscreen mode

根据上面的例子,我们编写了一个简单的函数,它接收学生的成绩并检查其是否高于 50 分或低于 50 分。如果输入的成绩高于 50 分,则if执行该代码块。如果低于 50 分,则else执行该代码块。

场景二

现在,想象一下更进一步,根据学生的具体成绩给出结果。例如,如果学生获得了“A+”,则会收到“Nailed It! 🥳”。如果学生获得了“D”,结果将是“Failed 😢”。

为了有这样的多个选择,我们可以使用 else-if 语句来链接额外的选择。

请参阅下面根据第二种情况使用 else-if 语句编写的代码。



function studentFinalResultIf(grade) {
  if (grade === "A+") {
    return "Nailed It! 🥳";
  } else if (grade === "A") {
    return "Passed 💃";
  } else if (grade === "B+") {
    return "Passed 💃";
  } else if (grade === "B") {
    return "Passed 💃";
  } else if (grade === "C") {
    return "Barely Survived 😌";
  } else if (grade === "D") {
    return "Failed 😢";
  } else {
    return "Failed 😢";
  }
}

cconsole.log(studentFinalResultIf("A+"));   // "Nailed It! 🥳"


Enter fullscreen mode Exit fullscreen mode

根据上述函数,我们使用不同的条件语句来根据学生的年级提供成绩。除了第一个代码块(即代码块)之外if,所有其他条件均在else if代码块中测试。如果所有条件都不成立,则最后一个else代码块将执行其代码块。

Switch 语句

switch 语句是一个多选语句。一旦你给出了选项以及每个选项的相关表达式,它就会逐一查找所有选项,直到找到与表达式匹配的选项并执行它。

让我们使用 switch 语句重写第二种场景。



function studentFinalResultSwitch(grade) {
  switch (grade) {
    case "A+":
      return "Nailed It! 🥳";
    case "A":
    case "B+":
    case "B":
      return "Passed 💃";
    case "C":
      return "Barely Survived 😌";
    case "D":
      return "Failed 😢";
    default:
      return "Failed 😢";
  }
}


console.log(studentFinalResultSwitch("A+"));   // "Nailed It! 🥳"


Enter fullscreen mode Exit fullscreen mode

在上面的例子中,我们有一个包含多个选项的主条件。当我们检查特定成绩时,它会检查该成绩所属的表达式,然后运行该 case 块。在本例中,当成绩为“A+”时,它会运行case "A+":并返回结果“Nailed It! 🥳”。

现在你可能会觉得 if-else 和 switch 语句非常相似,而且 if-else 似乎更易于使用。而且你可能有自己的理由选择其中一种。所以在下结论之前,让我们先来看看 if-else 和 switch 语句之间的区别。

比较图

基本术语 如果-否则 开关盒
检查测试表达式 if-else 语句可以根据一系列值或条件测试表达式。 switch 语句仅基于单个整数、枚举值或字符串对象测试表达式。
非常适合 if-else 条件分支非常适合产生布尔值的变量条件。 Switch 语句非常适合固定数据值。
跳转表的创建 在 if-else 情况中,我们不创建跳转表,所有情况都在运行时执行。 在 switch case 中,我们在编译时创建跳转表,仅在运行时执行选定的 case。
搜索类型 如果否则实现线性搜索。 Switch实现二进制开关。
条件与表达式 存在不同的条件是可能的。 我们只能有一个表情。
评估 If-else 语句评估整数、字符、指针或浮点类型或布尔类型。 Switch 语句仅评估字符或整数值。
执行顺序 要么执行 if 语句,要么执行 else 语句。 Switch case 语句逐个执行 case,直到出现 break 语句或到达 switch 语句的末尾。
默认执行 如果 if 语句中的条件为假,则默认情况下,将执行 else 语句(如果创建)。 如果 switch 语句中的条件与任何情况都不匹配,则对于该实例,如果创建了 default 语句,则会执行该语句。
价值观 值基于约束。 价值取决于用户的选择。
使用 它用于评估条件为真或假。 它用于测试同一变量或表达式的多个值,如 1、2、3 等。
编辑 如果使用嵌套的 if-else 语句,则很难编辑 if-else 语句 编辑 switch case 非常容易,因为它们很容易识别。

根据以上比较,您可以看到选择哪个条件语句取决于场景及其复杂性。例如,对于第二种情况,我们可以同时选择 if-else 和 switch 语句,因为我们只检查一份报告,除了可读性之外,这可能不会对性能产生任何影响。

让我们更进一步,让我们的场景变得稍微复杂一些。

场景三

如果我们想打印所有班级所有学生的成绩怎么办?假​​设五年级有十个班,每个班有 50 名学生。所以总共需要检查并打印大约 500 名学生的成绩。

如果我们使用 if-else 语句,可能会遇到轻微的性能延迟。这是因为在执行过程中,if-else 语句始终会执行表达式来检查条件是否满足。当需要检查的条件更多且选择变得复杂时,速度就会变得更慢。

另一方面,switch 语句的执行速度相对较快,因为编译器在编译时会为 switch-case 语句生成跳转表。因此,代码运行时,它只需决定应该执行哪些 case,而不是检查哪些 case 满足条件。在我们的第三个场景中,为了生成许多学生的报告,switch-case 可能是更好的方法。

我希望现在你能理解,基于上面的比较和我们的示例,这两个语句在代码中都有其适用之处,你可以自行选择适合哪种场景的语句。没有正确或错误的方法。

那么我们如何选择使用哪个语句呢?

如果-开关.png

选择其中之一并不那么简单。以下是一些选择技巧:

您可以在以下情况下使用 if-else:

  • 条件结果为boolean
  • 条件很复杂。例如,您的条件包含多个逻辑运算符。

您可以在以下情况下使用 switch-case:

  • 一个表达式有多种选择。
  • 该条件基于一组预定义的值,例如枚举、常量、已知类型。例如,错误代码、状态、状态、对象类型等。

因此,您需要根据性能、可读性、可理解性和可变性来决定使用 if-else 语句还是 switch 语句。当您阅读和编写更多代码时,最终您将开始弄清楚哪种语句适合哪种场景;这需要实践。

此外,如果您想尽可能避免条件,还有更多方法,特别是在 JavaScript 中;数组查找或对象查找是几种常见的方法。

总结

作为新手,你可能会对何时使用哪个语句感到困惑,但随着练习的增多,你会越来越熟练。请记住,每种情况都需要特定的解决方案,并没有绝对的正确或错误答案。你需要根据自己的经验选择合适的解决方案。因此,我希望这里提供的比较能帮助你更容易地识别 if-else 和 switch 语句之间的区别,而不是偏袒任何一方。

如果你唯一的工具是一把锤子,你就会倾向于把所有问题都看成钉子——亚伯拉罕·马斯洛

编码愉快!

giphy.gif

参考:


访问 Dasha AI
加入Dasha 开发者社区,您将遇到志同道合的开发者,他们会分享想法、问题,并获得构建酷炫的对话式 AI 应用程序所需的所有帮助(当然是免费的)。

文章来源:https://dev.to/sumusiriwardana/if-else-or-switch-case-which-one-to-pick-4p3h
PREV
图片延迟加载
NEXT
如何使用 Node.js 和 Heroku 创建 Twitter 机器人目录 the-datascience-bot