24小时制下JS between函数始终执行else分支,请求代码排查
问题排查与解决
嘿,我一眼就发现了问题所在——你的条件判断结构写错了!
问题根源
你写的三个if是完全独立的语句,最后那个else只和**最后一个if (time.between(15, 18))**绑定,而不是作为前面所有if的兜底分支。
当当前时间是8点时:
- 第一个
if (time.between(7, 9))会成立,执行对应的console.log - 第二个
if (time.between(9, 15))不成立,直接跳过 - 第三个
if (time.between(15, 18))也不成立,所以触发它绑定的else分支
这就是为什么你明明看到8点符合第一个区间,却依然会执行else的原因。另外,你的between函数逻辑是没问题的,8.between(7,9)确实会返回true,你可以观察第一个console.log的输出验证这一点。
修正后的代码
把后面的if改成else if,让整个条件判断形成互斥的逻辑链,这样只要前面的条件满足,后面的分支就不会执行,else也只会在所有区间都不匹配时触发:
// 获取时间 var today = new Date(); var time = today.getHours(); console.log(time); // 测试时当前为8点 // Between函数 Number.prototype.between = function(first, last) { return first < last ? this >= first && this <= last : this >= last && this <= first; }; // 执行逻辑(修正后) if (time.between(7, 9)) { console.log("between(7, 9)",time.between(7, 9)) } else if (time.between(9, 15)) { console.log("between(9, 15)",time.between(9, 15)) } else if (time.between(15, 18)) { console.log("between(15, 18)",time.between(15, 18)) } else { console.log("else") }
额外验证
你可以先确认console.log(time)确实输出8,确保getHours()获取的24小时制时间是正确的(8点就是8,这部分逻辑没问题)。
内容的提问来源于stack exchange,提问作者Haffy
相关产品推荐
相关产品推荐

