JS中Switch Case为何总是进入Default分支?
问题原因及解决方案
你的代码问题出在JavaScript switch语句的匹配逻辑上:
switch会将括号里的表达式(这里是num)和每个case后的表达式做全等(===)比较。你写的case (6 >= num >= 1)这类表达式,会先被求值为布尔值true或false,而传入的num是数字类型,数字和布尔值永远不可能全等,所以所有case都匹配失败,最终进入default分支。
另外要注意:JavaScript里6 >= num >= 1这种写法本身逻辑错误,它会先计算6 >= num得到布尔值,再用这个布尔值和1比较,结果永远不符合你预期的范围判断逻辑,必须拆成num >= 1 && num <= 6这种形式。
修正方案一:调整switch的匹配逻辑
把switch的表达式改为true,让case直接判断条件(此时case的布尔结果会和true做全等匹配):
getBoardLocation(num) { switch (true) { case (num >= 1 && num <= 6): return 'bl'; case (num >= 7 && num <= 12): return 'br'; case (num >= 13 && num <= 18): return 'tl'; case (num >= 19 && num <= 24): return 'tr'; default: // 可返回默认值或抛出错误,根据需求调整 return null; } }
修正方案二:改用if-else语句
对于范围判断场景,if-else的写法更直观,可读性更强:
getBoardLocation(num) { if (num >= 1 && num <= 6) { return 'bl'; } else if (num >= 7 && num <= 12) { return 'br'; } else if (num >= 13 && num <= 18) { return 'tl'; } else if (num >= 19 && num <= 24) { return 'tr'; } else { return null; } }
内容的提问来源于stack exchange,提问作者יוני ארליך
相关产品推荐
相关产品推荐

