所以我在if语句中有如下一段代码
if (!inTime || !moment(inTime).format('m') % 15 === 0) {
doSomething();
}
传入的inTime是2018-10-11T20:00:25Z。由于某种原因,条件已满足并且if块中的代码被调用。经过一些工具后,我发现该问题的两个修复方法如下
if (!inTime || !(moment(inTime).format('m') % 15 === 0)) {
doSomething();
}
*请注意爆炸后和0之后的括号 或者我可以这样做
if (!inTime || !moment(inTime).minute() % 15 === 0) {
doSomething();
}
我很想知道是否有人知道为什么会这样吗?
答案 0 :(得分:1)
表达式
!moment(inTime).format('m') % 15 === 0
被解释为好像是写的
((!moment(inTime).format('m')) % 15) === 0
因此其评估结果为
moment(inTime).format('m')
给出字符串“ 0” !moment(inTime).format('m')
给出布尔值false
,因为“ 0”是真实的((!moment(inTime).format('m')) % 15)
转换为数字(false
)并计算模量后,0
给出数字0 ((!moment(inTime).format('m')) % 15) === 0
给出true
tl; dr !
的绑定非常紧密。
由于您具有ISO日期字符串,因此仅使用本机Date API可能会更简单:
if (!inTime || new Date(inTime).getMinutes() % 15 !== 0)