JavaScript Switch实现分数转等级时始终返回default值如何解决
问题原因
JavaScript 中的 switch 语句执行的是严格相等比较(===),会将 switch 关键字后括号内的值,依次和每个 case 后表达式的返回值做全等匹配。
你当前代码里 switch(score) 传入的是数值类型的分数,但是每个 case 后的条件表达式返回的是布尔值 true/false,数值和布尔值做严格相等匹配永远不会成立,因此所有 case 都不会命中,只会走 default 分支。
解决方法
有两种常用的修正方案:
方案1:调整switch的匹配值
将 switch 后的值改为 true,即可匹配返回结果为 true 的区间条件:
const getLabelForScore = (score) => { let label = ''; // 改为匹配true switch (true) { case (score < 1): label = 'F'; break; case (score >= 1 && score < 1.8): label = 'E'; break; case (score >= 1.8 && score < 3): label = 'D'; break; case (score >= 3 && score < 4.2): label = 'C'; break; case (score >= 4.2 && score < 5): label = 'B'; break; case (score >= 5): label = 'A'; break; default: label = 'No Grade'; } return { score: score, label, }; };
方案2:改用if-else链式判断(更推荐)
区间判断的场景天生更适合用if-else链式结构,可读性更高,也不容易出现switch的匹配规则问题:
const getLabelForScore = (score) => { let label = ''; if (score < 1) { label = 'F'; } else if (score >= 1 && score < 1.8) { label = 'E'; } else if (score >= 1.8 && score < 3) { label = 'D'; } else if (score >= 3 && score < 4.2) { label = 'C'; } else if (score >= 4.2 && score < 5) { label = 'B'; } else if (score >= 5) { label = 'A'; } else { label = 'No Grade'; } return { score: score, label, }; };
内容的提问来源于stack exchange,提问作者Stephen
相关产品推荐
相关产品推荐

