JavaScript条件语句核心是if(处理布尔判断、范围检查)和switch(仅精确匹配固定值),需警惕真值陷阱与switch穿透问题。

JavaScript 条件语句不是“写法选择题”,而是根据运行时值决定执行哪段代码的机制。核心就两条:if 语句处理真假分支,switch 语句匹配离散值——用错场景或忽略隐式转换,程序就会走偏。
什么时候该用 if,什么时候该用 switch
if 适合做布尔判断、范围检查、复合条件;switch 只适合精确匹配已知的几个固定值(如状态码、枚举字符串)。拿用户权限判断举例:
- 用
if:检查user.age >= 18 && user.isVerified—— 涉及计算和逻辑组合 - 用
switch:根据response.status做不同处理,比如case 200、case 404、case 500 - 别用
switch判断score >= 90—— 它不支持表达式,只能匹配字面量或变量引用
if 里容易被忽略的真值陷阱
JavaScript 的条件判断基于“真值(truthy)/假值(falsy)”,不是布尔值。空数组 []、对象 {}、字符串 "false" 都是真值;而 0、""、null、undefined、NaN 是假值。常见误判:
- 检查输入是否为空字符串?别写
if (input)—— 输入"0"或" "也会通过 - 想确认变量有定义且非空?用
if (input != null && input !== "")或更安全的if (typeof input === "string" && input.trim().length > 0) - 和后端交互拿到
data.items,直接if (data.items)可能出错 —— 如果 API 返回{items: null},它会跳过;但如果是{items: []},它会进入分支,结果却遍历空数组
switch 必须加 break,但 default 不强制
switch 是“从上到下找第一个匹配项并执行”,没有 break 就会“穿透”到下一个 case。这是设计特性,不是 bug,但多数时候你要避免它。
立即学习“Java免费学习笔记(深入)”;
let fruit = "apple";
switch (fruit) {
case "apple":
console.log("red");
case "banana": // 没有 break!这里也会执行
console.log("yellow");
break;
case "grape":
console.log("purple");
}
// 输出:red\nyellow
- 每个
case块末尾显式写break,除非你明确需要穿透 -
default不是必须的,但如果漏掉且没匹配任何case,就什么也不做 —— 这可能掩盖逻辑缺陷 - 注意:
switch使用严格相等(===)比较,所以case 1:不会匹配字符串"1"
最常出问题的地方不在语法,而在把条件判断当成“流程开关”来用,却忘了数据本身可能不符合预期。多一层校验,比多一个 else 更可靠。










