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

这段基于国家与时间生成问候语的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 19:57:14