主题
条件分支
条件分支用于“根据不同条件走不同路径”。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')
}常见假值包括:
false0''nullundefinedNaN
如果只是想判断“有没有值”,要注意别误伤 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。 - 判断条件前先想清楚:到底是在判断真假,还是在判断“值是否存在”。
