条件语句在javascript中怎样使用_有哪些最佳实践【教程】

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

JavaScript 中的条件语句不是“怎么写对”,而是“怎么写得不容易出错、好维护、能被别人一眼看懂”。直接上结论:优先用 if 处理明确分支逻辑,用 switch 处理多个离散值匹配,避免嵌套过深,别把条件判断塞进赋值语句里。

什么时候该用 if,什么时候该用 switch?

if 适合做布尔判断、范围判断、组合条件(比如 a > 0 && b );switch 只适合严格相等(===)的单值匹配,比如状态码、枚举字段、固定字符串。

  • switch 时,每个 case 后必须显式写 break,漏掉就会“穿透”到下一个分支 —— 这是线上 bug 的高频来源
  • 如果判断的是对象属性或函数返回值,先确保它不是 nullundefined,否则 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 不会误吞 0false

容易被忽略的隐式类型转换陷阱

JavaScript 在 if 判断中会自动调用 ToBoolean,导致 0''nullundefinedNaN 都为 false。这不是 bug,但常被误用。

  • 检查对象是否存在,别写 if (obj),而要写 if (obj != null)if (obj !== undefined && obj !== null),防止 obj0false 时逻辑跳过
  • 判断数组是否为空,别用 if (arr),要用 if (Array.isArray(arr) && arr.length > 0)
  • 字符串非空判断,别依赖 if (str),因为 ' '(空格)会被转成 true,应写 if (str?.trim())

最麻烦的不是语法不会写,而是团队里有人把条件逻辑藏在 getter 里、有人用 !! 强转、还有人把整个 if 块包进立即执行函数 —— 这些都会让后续排查变得困难。保持条件表达式直白,比追求“一行写完”重要得

多。