为什么这段实现分数评级的JavaScript switch语句无法正常运行?
故障原因
- 核心逻辑错误:JS的
switch采用**严格全等(===)**匹配规则,你当前switch后传入的是分数值,而每个case后的条件表达式返回的是布尔值true/false,二者类型不一致永远无法匹配,所有判断分支都会失效。 - 数据类型错误:
prompt的返回值是字符串类型,未做类型转换直接和数字做大小比较,存在隐式转换风险,若用户输入非数字内容会导致判断异常。 - 区间边界错误:现有区间存在重叠,比如分数等于80时,同时满足
>=80 && <=100和>=70 && <=80两个条件,边界值匹配逻辑混乱。 - 拼写错误:代码中的
gread应为grade,成绩不及格的提示Field应为Fail。
修正方案
如果要使用switch实现区间判断,可以将switch后的表达式设为true,这样只要case后的条件返回true就可以命中对应分支,同时做好类型校验和区间调整,修正后代码如下:
// 把prompt返回的字符串转成数字 const number = Number(prompt("Enter your number")); const txt = "Your result is : "; // switch传入true,匹配返回true的case条件 switch (true) { case isNaN(number): document.write(`Not input any valid number. Please input a number.`); break; case (number >= 80 && number <= 100): document.write(`${txt} A+`); break; case (number >= 70 && number < 80): document.write(`${txt} A grade`); break; case (number >= 60 && number < 70): document.write(`${txt} B grade`); break; case (number >= 50 && number < 60): document.write(`${txt} C grade`); break; case (number >= 33 && number < 50): document.write(`${txt} D grade`); break; case (number >= 0 && number < 33): document.write(`${txt} Fail !`); break; case (number > 100 || number < 0): document.write(`It's not a valid number. Please input a valid number between 0 and 100.`); break; default: document.write(`Please input a valid number.`); break; }
内容的提问来源于stack exchange,提问作者Mehedi Hasan
相关产品推荐
相关产品推荐

