You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 14:57:04