You need to enable JavaScript to run this app. JavaScript中使用数组值的if判断语句失效问题
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中使用数组值的if判断语句失效问题

问题根因
  • 首条if判断永远为真,导致所有后续分支完全不触发。
    代码中书写的if (CurrentDay === days[1] || days[2] || days[3]) 是JS开发中极易踩的语法误区:这种写法并不等价于自然语言里的“如果CurrentDay等于days[1]、days[2]、days[3]任意一个,就执行分支”。按照JS的运算规则,逻辑或||会从左到右计算每个操作数的真值,非空字符串属于恒真的真值,days[2](值为'Wednesday')、days[3](值为'Thursday')都是非空字符串,因此无论最左侧CurrentDay === days[1]的比较结果是true还是false,整个表达式最终都会返回true。程序进入首个if分支执行赋值后,后面的else if分支会被直接跳过,完全没有执行机会。
    同理,代码里的else if (CurrentDay === days[4] || days[5]) 也是完全一样的逻辑错误,只是因为首条if永远为真,这个分支根本没机会运行到。
  • 存在附带的拼写错误:days数组里的'Teusday'(正确拼写为Tuesday)、'Sataurday'(正确拼写为Saturday),就算修正了判断逻辑,用户输入正确拼写的星期时也会出现匹配失败。
修正方法
  • 规范逻辑判断的书写:使用逻辑或拼接多个等值判断时,每个比较项都要补全完整的判断表达式,不能省略变量的比较部分。例如要判断CurrentDay匹配周二、周三、周四,需要写为CurrentDay === days[1] || CurrentDay === days[2] || CurrentDay === days[3],不能只写后面的数组值。
  • 修正数组内的拼写错误,避免匹配错位。
  • 增加无匹配场景的默认赋值,避免用户输入不存在的内容时输出初始值0。

修正后可正常运行的代码

// 修正数组内的拼写错误
var days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];
var CurrentDay = window.prompt('what day is it?');

var lunchTime = 0;
var EndTime = 0;
var StartTime = 0;

// 补全所有比较项的完整判断逻辑
if (CurrentDay === days[1] || CurrentDay === days[2] || CurrentDay === days[3]) {
    lunchTime = "12pm-1pm";
    EndTime = "6pm";
    StartTime = "8am";
}
else if (CurrentDay === days[0]) {
    lunchTime = "12pm-1pm";
    EndTime = "6pm";
    StartTime = "9am";
}
else if (CurrentDay === days[4] || CurrentDay === days[5]) {
    lunchTime = "12pm-1pm";
    EndTime = "6pm";
    StartTime = "10am";
}
else if (CurrentDay === days[6]) {
    lunchTime = "12:30pm-2pm";
    EndTime = "6pm";
    StartTime = "10am";
}
// 增加无匹配场景的兜底赋值
else {
    lunchTime = "未匹配到对应日期配置";
    EndTime = "未匹配到对应日期配置";
    StartTime = "未匹配到对应日期配置";
}

alert(lunchTime);
alert(EndTime);
alert(StartTime);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 02:15:02