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

JS条件语句挑战问题求助:西班牙、墨西哥场景测试不通过但法国场景正常

JS条件语句挑战问题求助:西班牙、墨西哥场景测试不通过但法国场景正常

嘿,我一眼就发现你代码里的两个关键问题,这就是为什么西班牙、墨西哥的测试全部失败,但法国场景能正常通过的原因:

  • 第一个错误:逻辑或的写法完全不符合预期
    你写的country === 'Spain' || 'Mexico'并不是判断「country是Spain或者Mexico」。在JavaScript里,||运算符会先计算左边的表达式country === 'Spain',然后右边的'Mexico'是一个非空字符串,属于真值,所以整个表达式永远为真!正确的写法应该是分别对每个国家做相等判断:country === 'Spain' || country === 'Mexico'。

  • 第二个更致命的问题:两个独立的if块会覆盖变量值
    你先写了处理西班牙、墨西哥的if-else逻辑,紧接着又写了一个处理法国的if-else块。举个例子:当country是Spain且时间为早上时,第一个if块确实把greeting设为'buenos dias',但第二个if块执行时,因为country不是France,会进入else分支直接把greeting改成null!这就是测试里显示「expected null to equal 'buenos dias'」的根本原因。法国场景能过,是因为当country是France时,第二个if块会覆盖第一个if块的null结果,刚好符合预期,但其他国家的结果就被意外覆盖了。

修正后的代码示例

我们可以把所有逻辑整合到一个判断链里,先判断时间有效性,再处理国家分支,避免变量被意外覆盖:

function sayHello(country, time) {
  let greeting = null; // 默认值设为null,符合题目“其他情况返回null”的要求

  // 先判断时间是否在有效范围内
  if (time >= 0 && time < 24) {
    // 时间有效时,再根据国家判断问候语
    if (country === 'Spain' || country === 'Mexico') {
      greeting = time < 12 ? 'buenos dias' : 'buenas noches';
    } else if (country === 'France') {
      greeting = time < 12 ? 'bon matin' : 'bon soir';
    }
    // 其他国家保持默认的null即可
  }
  // 时间无效时,同样保持默认的null

  return greeting;
}

修正思路说明

  1. 先统一处理时间有效性,避免重复编写相同的时间判断逻辑
  2. 用三元运算符简化早晚时段的判断,让代码更简洁易读
  3. 把所有逻辑整合到一个分支链中,彻底避免后续代码覆盖之前变量值的问题
  4. 默认将greeting设为null,完美契合题目中「其他情况都返回null」的要求

以后写多条件判断时,要注意逻辑运算符的优先级,还要警惕多个独立if块的执行顺序会不会干扰变量值,尽量把相关逻辑整合到一个判断链里哦~

备注:内容来源于stack exchange,提问作者James

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 12:54:33