每个程序都需要做出反应。用户点击按钮,API 返回数据,表单字段变为空。如果没有分支机制,你的代码无论实际发生什么都会逐行运行。条件语句赋予了 JavaScript 选择的能力。它们是函数内部的决策者,是决定哪些代码运行、哪些代码跳过的守门员。一旦你掌握了如何写好它们,你就不再是编写僵化的脚本,而是开始构建真正具有响应能力的软件。

为什么条件语句很重要

控制流是逻辑的支柱。你使用条件语句在将密码发送到服务器之前进行验证;在计算税费之前检查购物车是否为空;在网络请求失败时检测到它,以便显示错误而不是空白屏幕。这些场景都依赖于同一个简单的想法:评估某件事,然后采取相应的行动。

如果没有条件语句,你的应用程序将是一场独白,而不是一场对话。它无法处理不同的数据场景,无法优雅地管理错误,也无法以任何有意义的方式对用户操作做出反应。它们让你能够控制程序在现实世界的不确定性下如何运行。

基础 if 语句

最简单的起点是独立的 if。它表达的是:如果这件事是真的,就执行这项工作。仅此而已。没有备选方案,没有替代路径。

if (x % 2 === 0) {
    console.log("Even");
}

在这个代码片段中,取模运算符检查 x 是否能被 2 整除。当余数为零时,控制台会打印该字符串。如果 x 是奇数,则什么都不会发生。该代码块会被忽略,执行将继续向下进行。

这种“静默忽略”非常重要。有时你只想保护单个动作。也许你只想在按钮处于激活状态时才为其添加 CSS 类,或者仅在输入不为空时才向数组添加项。一个单纯的 if 语句可以处理这些时刻,而无需强迫你编写不需要的逻辑。

使用 if-else 添加备选方案

现实中的决策通常都有两面。用户要么足够年长,要么不够。支付要么成功,要么失败。if-else 结构涵盖了这两种情况。

if (age >= 18) {
    console.log("Adult");
} else {
    console.log("Not an Adult");
}

else 块会捕获第一个条件拒绝的所有情况。它创建了一个清晰的二元分支。这种模式非常适用于开关(toggles)、权限控制和功能开关(feature flags)。保持每个块内部逻辑的专注。如果你发现自己在单个分支中堆叠了太多任务,这通常是一个信号,提示你需要将工作拆分为更小的函数。

使用 else if 检查多条路径

生活很少只提供两个选择。你可能需要将一个数字分类为正数、负数或零。你可能需要根据重量区间分配运费。对于有序的多重比较,请使用 else if

if (x > 0) {
    console.log("Positive");
} else if (x < 0) {
    console.log("Negative");
} else {
    console.log("Zero");
}

JavaScript 从上到下评估这些条件。一旦某个条件通过,它就会运行该代码块并忽略其余部分。顺序非常重要。如果你在检查 x > 100 之后才检查 x > 0,那么更严格的检查将永远不会运行,因为较宽松的检查会先捕获它。把 else if 想象成一个优先级列表。

switch 语句

当你将一个值与许多离散的选项进行比较时,长串的 else if 语句可能会显得很重复。switch 语句可以简化这一点。它将表达式与 case 子句进行匹配,并运行匹配的代码块。

switch (true) {
    case marks >= 90:
        Branch = "Computer science";
        break;
    case marks >= 80:
        Branch = "Mechanical";
        break;
    default:
        Branch = "Other";
}

这个例子使用 switch(true) 来直接评估布尔条件,当你的逻辑依赖于范围而非精确相等时,这是 JavaScript 中一种常见的模式。break 关键字至关重要。如果没有它,无论是否匹配,执行都会“穿透”(fall through)到下一个 case,这通常不是你想要的结果。default 子句的作用类似于最后的 else,用于捕获所有不符合先前 case 的情况。

当你有明确、固定的选项时,switch 的优势就会显现。它通常比一长串 else if 块更容易阅读,尤其是当每个分支只是简单地分配一个值或调用单个函数时。

三元运算符

对于简短的二元决策,三元运算符可以让代码保持简洁。它接受三个操作数:一个条件、如果为真时的值,以及如果为假时的值。

const result = (age >= 18) ? "Eligible" : "Not eligible";

你可以将其用于快速赋值或内联返回。当结果是一个简单的表达式时,它的效果很好。请抵制嵌套三元运算符达到三层深度的冲动。嵌套的三元运算符可能会节省行数,但会牺牲可读性。当你的逻辑变得复杂时,使用 if-else 块通常对打开文件的下一个开发者更加友好。

嵌套决策

复杂的逻辑有时需要提出后续问题。你可以在一个 if 语句中嵌套另一个 if 语句,以细化决策。

if (weather === "sunny") {
    if (temp > 30) {
        console.log("