JavaScript墨西哥无效时间场景AssertionError问题排查求助
问题分析与修复
错误原因
你的代码存在两个核心问题,导致墨西哥无效时间(如负数时间)测试失败:
- 未优先校验时间有效性:任务规则明确要求,时间小于0或大于等于24时,无论所属国家都需返回
null。但你的代码处理墨西哥场景时,直接判断time < 12,若输入负数时间(如-3),该条件会成立,错误返回buenos dias而非null。 - 最后分支逻辑错误:
else if (country === 'Spain' || 'Mexico' || 'France' && time > 24)的写法完全不符合逻辑——逻辑运算符&&优先级高于||,且字符串'Mexico'在布尔判断中属于真值,此表达式会被解析为country === 'Spain' || true || ('France' && time>24),永远为真,但它处于最后分支,无法覆盖前面漏判的无效时间场景(比如墨西哥的负数时间)。
另外,西班牙的无效时间测试通过,大概率是因为测试用例仅覆盖了time >=24的情况,未涉及负数时间;而墨西哥的无效时间测试包含了负数场景,因此暴露了问题。
修复后的代码
调整逻辑顺序,先校验时间有效性,再处理不同国家的有效时间场景:
function sayHello(country, time) { // 先处理所有无效时间:小于0或大于等于24 if (time < 0 || time >= 24) { return null; } let greeting; // 合并西班牙、墨西哥的相同逻辑 if (country === 'Spain' || country === 'Mexico') { greeting = time < 12 ? 'buenos dias' : 'buenas noches'; } else if (country === 'France') { greeting = time < 12 ? 'bon matin' : 'bon soir'; } else { // 其他国家统一返回null greeting = null; } return greeting; }
修复说明
- 优先判断时间有效性,从根源避免无效时间进入后续分支;
- 合并西班牙与墨西哥的重复逻辑,精简代码同时保证逻辑清晰;
- 明确处理其他国家的场景,覆盖所有边缘情况。
内容的提问来源于stack exchange,提问作者AhmedFx220
相关产品推荐
相关产品推荐

