如何简化JavaScript IF/ELSE营业时间判断函数并修复12PM判断错误
问题原因分析
你之前的简化版代码逻辑出错核心是两点:
- 分支判断顺序错误:
time >=6 && period === 'PM'的判断优先级高于time === 12 && period === 'PM',12PM的参数会先命中前一个判断直接返回结果,后面的分支永远不会生效 - 没有处理12这个特殊值的逻辑:12小时制里12AM/12PM和常规1-11点的上下午逻辑不一致,单独拆分判断很容易遗漏
最优解决方案
最不容易出错的写法是先把输入的12小时制时间转为24小时制,再统一做区间判断,逻辑清晰无冗余:
function shopHours(time, period) { // 转24小时制 let hour24 if (period === 'AM') { hour24 = time === 12 ? 0 : time } else { hour24 = time === 12 ? 12 : time + 12 } // 6AM(6点)到6PM(18点)营业,包含6AM,不包含6PM return hour24 >= 6 && hour24 < 18 ? 'Open' : 'Closed' }
测试验证
所有边界情况都能正确覆盖:
- 6 AM → 返回
Open - 5:59 AM → 返回
Closed - 12 PM(正午)→ 返回
Open - 5 PM → 返回
Open - 6 PM → 返回
Closed - 12 AM(凌晨零点)→ 返回
Closed
如果你的业务规则里正午12PM确实需要返回Closed,只需要把24小时制的判断条件修改为hour24 >=6 && hour24 <12即可。
如果你一定要保留多分支if/else的写法来练习语法,可以调整分支顺序,优先处理12点的特殊情况,再处理通用判断:
function shopHours(time,period) { // 优先处理12点的特殊情况 if (time === 12) { return period === 'AM' ? 'Closed' : 'Open' } // 再处理通用情况 if (period === 'AM') { return time >=6 ? 'Open' : 'Closed' } else { return time <6 ? 'Open' : 'Closed' } }
内容的提问来源于stack exchange,提问作者Ursu
相关产品推荐
相关产品推荐

