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,但多数时候你要避免它。
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 更可靠。