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

if/else语句布尔逻辑故障:多国家时段问候函数异常修复请求

问题分析与修复

你的代码核心问题出在逻辑运算符的优先级上:JavaScript中&&的优先级高于||,导致条件表达式被错误解析,触发了异常结果。

具体错误点:

  1. 墨西哥晚间输出错误:
    原代码第一个条件morning && country === 'Spain'|| country==='Mexico'会被解析为(morning && country === 'Spain') || country==='Mexico'——这意味着只要country是Mexico,不管morning是true还是false,都会进入该分支,所以墨西哥晚间(morning=false)时会错误赋值buenos dias。

  2. 法国晚间输出null:
    当法国处于晚间(!morning=true)时,原代码第二个条件!morning && country === 'Mexico'|| country==='Spain'会被解析为(!morning && country === 'Mexico') || country==='Spain',法国不满足该条件;后续第三个条件因morning=false不触发,本应匹配的第四个条件!morning && country==='France'虽逻辑上成立,但如果测试时time超出0-24范围导致morning=null,会因!null=true但原代码逻辑的优先级问题间接触发else分支,最终返回null。

修复后的代码:

function sayHello(country, time) {
  let greeting;
  let morning; 
  if(time >= 0 && time < 12){
      morning = true; 
  } else if(time >= 12 && time < 24){
      morning = false; 
  } else {
      morning = null; 
  };

  // 给多国家判断添加括号,确保逻辑顺序正确
  if(morning && (country === 'Spain' || country === 'Mexico')){
    greeting = 'buenos dias';
  } else if (!morning && (country === 'Mexico' || country === 'Spain')){
    greeting = 'buenos noches';
  } else if(morning && country === 'France'){
    greeting = 'bon matin';
  } else if(!morning && country === 'France'){
    greeting = 'bon soir';
  } else {
    greeting = null; 
  }

  return greeting;
}

console.log(sayHello('Mexico', 15)); // 输出"buenos noches"
console.log(sayHello('France', 18)); // 输出"bon soir"

修复说明:

给每个涉及多国家判断的条件加上括号(country === 'Spain' || country === 'Mexico'),确保先判断国家是否属于目标集合,再结合morning的状态进行逻辑运算,彻底避免优先级导致的逻辑混乱。修复后所有场景的问候语都能正确返回。

内容的提问来源于stack exchange,提问作者Umar Hussain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 10:42:55