Javascript 一个奇怪的时刻

Javascript 一个奇怪的时刻,javascript,momentjs,Javascript,Momentjs,我在if语句中有如下代码 if (!inTime || !moment(inTime).format('m') % 15 === 0) { doSomething(); } if (!inTime || !(moment(inTime).format('m') % 15 === 0)) { doSomething(); } 通过的时间是2018-10-11T20:00:25Z。由于某种原因,满足了该条件,并且正在调用if块中的代码。经过一些工具处理后,我发现该问题的两个修复方法如下 if (

我在if语句中有如下代码

if (!inTime || !moment(inTime).format('m') % 15 === 0) {
doSomething();
}
if (!inTime || !(moment(inTime).format('m') % 15 === 0)) {
doSomething();
}
通过的时间是2018-10-11T20:00:25Z。由于某种原因,满足了该条件,并且正在调用if块中的代码。经过一些工具处理后,我发现该问题的两个修复方法如下

if (!inTime || !moment(inTime).format('m') % 15 === 0) {
doSomething();
}
if (!inTime || !(moment(inTime).format('m') % 15 === 0)) {
doSomething();
}
*注意爆炸后和0之后的帕伦 或者我可以这样做

if (!inTime || !moment(inTime).minute() % 15 === 0) {
doSomething();
}
我很想知道是否有人知道为什么会这样

!moment(inTime).format('m') % 15 === 0
就好像是写的一样

((!moment(inTime).format('m')) % 15) === 0
因此,其评估过程如下:

  • moment(inTime).format('m')
    给出字符串“0”
  • !矩(inTime).format('m')
    给出布尔值
    false
    ,因为“0”是真的
  • ((!moment(inTime).format('m'))%15)
    在将
    false
    转换为数字(
    0
    )并计算模数后,给出数字0
  • ((!moment(inTime).format('m'))%15)==0
    给出
    true
  • tl;博士
    绑定得非常紧密

    因为您有一个ISO日期字符串,所以只使用本机日期API可能更简单:

    if (!inTime || new Date(inTime).getMinutes() % 15 !== 0)
    

    你还有0分钟
    0%15
    0
    正确的,但如果不是,砰的一声应该会使条件运行0@AustenElswick
    仅应用于
    .format()
    调用结果,而不是
    =
    比较。