每个程序都需要做出反应。用户点击按钮,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("
