这段基于国家与时间生成问候语的JS switch/else语句存在什么问题?
代码存在的问题及修复方案
1. 时间范围判断逻辑错误
你写的time >= 0 < 12和time >= 12 < 24不符合JavaScript的逻辑判断规则。这种写法会先计算time >= 0得到布尔值,再用这个布尔值和后面的数字比较,结果完全不符合你要判断时间区间的预期。正确写法是用逻辑与&&连接两个条件:time >= 0 && time < 12、time >= 12 && time < 24。
2. switch的default分支未正确赋值
在switch的default分支里,你只写了null,没有把它赋值给greeting,这会导致当传入的国家不在预设列表中时,greeting变量保持初始的undefined,而不是你预期的null。应该改成greeting = null。
3. 可选优化:业务逻辑的合理性(非语法错误)
按照需求,12点之后就输出西班牙语的buenas noches,但实际场景中这个问候语一般用于傍晚之后(比如18点),如果需要贴合真实使用习惯,可以调整时间区间的划分,这属于业务逻辑调整,不是代码本身的错误。
修复后的代码
function sayHello(country, time) { let greeting; if (time >= 0 && time < 12) { switch (country) { case 'Spain': case 'Mexico': greeting = 'buenos dias'; break; case 'France': greeting = 'bon matin'; break; default: greeting = null; break; } } else if (time >= 12 && time < 24) { switch (country) { case 'Spain': case 'Mexico': greeting = 'buenas noches'; break; case 'France': greeting = 'bon soir'; break; default: greeting = null; break; } } else { greeting = null; } // Don't change code below this line return greeting; } console.log(sayHello('Spain', 11)); // 输出 "buenos dias" console.log(sayHello('France', 11)); // 输出 "bon matin"
内容的提问来源于stack exchange,提问作者Vicky12345
相关产品推荐
相关产品推荐

