一个奇怪的moment.js东西

时间:2018-10-11 22:41:09

标签: javascript momentjs

所以我在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();
}

我很想知道是否有人知道为什么会这样吗?

1 个答案:

答案 0 :(得分:1)

表达式

!moment(inTime).format('m') % 15 === 0

被解释为好像是写的

((!moment(inTime).format('m')) % 15) === 0

因此其评估结果为

  1. moment(inTime).format('m')给出字符串“ 0”
  2. !moment(inTime).format('m')给出布尔值false,因为“ 0”是真实的
  3. ((!moment(inTime).format('m')) % 15)转换为数字(false)并计算模量后,
  4. 0给出数字0
  5. ((!moment(inTime).format('m')) % 15) === 0给出true

tl; dr !的绑定非常紧密。

由于您具有ISO日期字符串,因此仅使用本机Date API可能会更简单:

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