Skip to content

条件分支

条件分支用于“根据不同条件走不同路径”。JavaScript 里最常见的几种方式是:

  • if / else if / else
  • 条件运算符 ? :
  • switch

if

if 是最基础也最常用的分支写法。

js
const score = 80

if (score >= 60) {
  console.log('pass')
}

只要条件表达式最终转换为 true,就会执行对应代码块。

else

当条件不满足时,可以通过 else 处理兜底分支:

js
if (score >= 60) {
  console.log('pass')
} else {
  console.log('fail')
}

else if

有多个互斥条件时,通常用 else if 串联:

js
if (score >= 90) {
  console.log('A')
} else if (score >= 80) {
  console.log('B')
} else if (score >= 60) {
  console.log('C')
} else {
  console.log('D')
}

这种写法适合“按顺序排查多个区间或条件”的场景。

条件表达式会做布尔转换

if (...) 不要求里面一定是布尔值,JavaScript 会先把表达式转成布尔结果。

js
if ('hello') {
  console.log('truthy')
}

if (0) {
  console.log('never run')
}

常见假值包括:

  • false
  • 0
  • ''
  • null
  • undefined
  • NaN

如果只是想判断“有没有值”,要注意别误伤 0、空字符串这类合法数据。

什么时候用 if

if 适合:

  • 条件分支较复杂
  • 每个分支要执行多条语句
  • 条件之间不是简单的值匹配

条件运算符 ? :

条件运算符适合“根据条件返回一个值”。

js
const status = score >= 60 ? 'pass' : 'fail'

它更像表达式,不像 if 那样偏语句控制。

适合场景

js
const label = isLogin ? '退出' : '登录'
const color = disabled ? '#999' : '#1677ff'

这类“一眼能看懂的二选一赋值”非常适合用三元表达式。

不适合场景

如果嵌套过深,可读性会明显下降:

js
const message = age < 3 ? 'baby' : age < 18 ? 'hello' : age < 60 ? 'welcome' : 'hi'

这时通常更适合改写成 if / else if

不要把它当作语句控制替代品

下面这种写法虽然能运行,但不推荐:

js
isLogin ? logout() : login()

如果分支的目标是“执行不同动作”,而不是“得到不同值”,优先使用 if

switch

当分支是“同一个值对应多个离散情况”时,switch 会比一长串 if / else if 更清晰。

js
const method = 'POST'

switch (method) {
  case 'GET':
    console.log('read')
    break
  case 'POST':
    console.log('create')
    break
  default:
    console.log('unknown')
}

switch 的执行规则

switch 会拿表达式结果和每个 case 做严格相等比较,也就是按 === 规则匹配。

js
const value = '1'

switch (value) {
  case 1:
    console.log('number')
    break
  case '1':
    console.log('string')
    break
}

这里命中的是 '1',而不是数字 1

break 很重要

如果没有 break,会继续落入后面的分支:

js
const level = 'warning'

switch (level) {
  case 'warning':
    console.log('warning')
  case 'error':
    console.log('error')
  default:
    console.log('done')
}

输出会是:

js
warning
error
done

这种现象叫穿透。

有意的分组写法

有时也会故意利用穿透把多个分支归到一组:

js
switch (status) {
  case 401:
  case 403:
    console.log('no permission')
    break
  case 404:
    console.log('not found')
    break
  default:
    console.log('other')
}

如何选择

if

适合:

  • 条件是范围判断
  • 条件是组合逻辑
  • 每个分支逻辑较复杂

? :

适合:

  • 简单二选一
  • 目标是返回一个值
  • 分支足够短

switch

适合:

  • 同一个变量匹配多个固定值
  • 分支枚举清晰
  • 更强调“值到行为”的映射

常见误区

不要把“有值”误写成“业务成立”

js
if (count) {
  console.log('has count')
}

如果 count = 0 在业务上是合法值,这样判断就会出错。更合适的写法可能是:

js
if (count !== null && count !== undefined) {
  console.log('count exists')
}

switch 比较的是严格相等

不要以为它会像 == 一样自动帮你转类型。

不要为了“短”滥用三元表达式

当一段条件表达式需要换行、嵌套、夹杂函数调用时,通常已经不适合继续用 ? :

使用建议

  • 分支稍复杂时,优先选择更易读的 if
  • 简单赋值场景可以用三元表达式,但控制在一眼能看懂的程度。
  • 多个固定值分支优先考虑 switch
  • 判断条件前先想清楚:到底是在判断真假,还是在判断“值是否存在”。

基于 MIT 许可发布