javascript的switch语句不支持直接范围匹配,但可通过switch(true)配合布尔表达式模拟范围判断,需按高到低排序,且if-else更推荐用于范围判断。

JavaScript 的 switch 语句本身不支持直接写范围(比如 case 10..20:),它只做严格相等(===)匹配。但你可以通过把条件表达式作为 switch 的“值”,配合 true 作为判断基准,来模拟范围判断。
用 true 作为 switch 的判断值
核心思路:让每个 case 是一个返回布尔值的表达式,整个 switch 拿 true 去匹配第一个为 true 的 case。
- 这利用了
switch的匹配机制——只要case表达式结果与switch(…)中的值严格相等,就进入该分支 - 因为所有
case都是布尔表达式,我们把switch(true)当作“开关”,逐个试哪个条件先成立
写法示例:判断成绩等级
比如将分数映射为等级:
const score = 85;
switch (true) {
case score >= 90:
console.log('A');
break;
case score >= 80:
console.log('B');
break;
case score >= 70:
console.log('C');
break;
case score >= 60:
console.log('D');
break;
default:
console.log('F');
}
注意顺序:必须从高到低排列,否则 score >= 60 会提前命中所有及格分数,导致后续 case 不执行。
替代方案:优先考虑 if-else
虽然上面写法可行,但可读性和维护性不如 if-else if-else 清晰:
-
if-else是范围判断的自然选择,语义明确、调试友好、工具支持好 - 某些代码检查工具(如 ESLint)可能警告
switch(true)属于非常规用法 - 如果只是简单范围判断,没必要强行用
switch;只有在已有大量case且想统一结构时才酌情考虑
进阶技巧:封装成可复用函数
若需多处使用类似逻辑,可以封装为函数,提高复用性:
function getGrade(score) {
switch (true) {
case score >= 90: return 'A';
case score >= 80: return 'B';
case score >= 70: return 'C';
case score >= 60: return 'D';
default: return 'F';
}
}
console.log(getGrade(87)); // 'B'
这样既保持逻辑集中,又避免重复写 switch(true) 结构。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











