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
相关产品推荐
相关产品推荐

