优先用 if 处理明确分支逻辑,用 switch 处理多个离散值匹配;避免嵌套过深、条件塞入赋值语句;布尔/范围/组合条件用 if,离散值匹配用 switch;字符串判空应写 if (str?.trim()) 而非 if (str)。

JavaScript 中的条件语句不是“怎么写对”,而是“怎么写得不容易出错、好维护、能被别人一眼看懂”。直接上结论:优先用 if 处理明确分支逻辑,用 switch 处理多个离散值匹配,避免嵌套过深,别把条件判断塞进赋值语句里。
什么时候该用 if,什么时候该用 switch?
if 适合做布尔判断、范围判断、组合条件(比如 a > 0 && b );switch 只适合严格相等(===)的单值匹配,比如状态码、枚举字段、固定字符串。
- 用
switch时,每个case后必须显式写break,漏掉就会“穿透”到下一个分支 —— 这是线上 bug 的高频来源 - 如果判断的是对象属性或函数返回值,先确保它不是
null或undefined,否则switch会走到default或直接报错 -
if嵌套超过三层就该考虑拆成函数,比如把权限校验逻辑抽成canAccess(resource)
三元运算符 ? : 到底能不能用?
能用,但只限于简单取值场景,比如给变量设默认值、控制 JSX 中的 class 名。它不是 if 的缩写替代品。
- 别写这种:
user.role === 'admin' ? (user.status === 'active' ? 'granted' : 'pending') : 'denied'—— 可读性归零 - 允许写这种:
const className = isActive ? 'btn--active' : 'btn--default' - 更安全的默认值写法是用空值合并操作符
??,比如config.timeout ?? 5000,比config.timeout || 5000不会误吞0或false
容易被忽略的隐式类型转换陷阱
JavaScript 在 if 判断中会自动调用 ToBoolean,导致 0、''、null、undefined、NaN 都为 false。这不是 bug,但常被误用。
立即学习“Java免费学习笔记(深入)”;
- 检查对象是否存在,别写
if (obj),而要写if (obj != null)或if (obj !== undefined && obj !== null),防止obj是0或false时逻辑跳过 - 判断数组是否为空,别用
if (arr),要用if (Array.isArray(arr) && arr.length > 0) - 字符串非空判断,别依赖
if (str),因为' '(空格)会被转成true,应写if (str?.trim())
最麻烦的不是语法不会写,而是团队里有人把条件逻辑藏在 getter 里、有人用 !! 强转、还有人把整个 if 块包进立即执行函数 —— 这些都会让后续排查变得困难。保持条件表达式直白,比追求“一行写完”重要得多。











