所以我在 if 语句中有这段代码如下
if (!inTime || !moment(inTime).format('m') % 15 === 0) {
doSomething();
}
传入的 inTime 是 2018-10-11T20:00:25Z。由于某种原因,满足了条件并且正在调用 if block 中的代码。经过一些工具后,我发现了两个问题的修复,如下所示
if (!inTime || !(moment(inTime).format('m') % 15 === 0)) {
doSomething();
}
*注意 bang 之后和 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”!moment(inTime).format('m')
给出 bool 值false
,因为“0”为真((!moment(inTime).format('m')) % 15)
给出数字0,false
转换为数字后(0
) 并计算模数((!moment(inTime).format('m')) % 15) === 0
给出true
tl;dr !
绑定(bind)得非常紧密。
由于您有一个 ISO 日期字符串,因此使用 native Date API 可能会更简单:
if (!inTime || new Date(inTime).getMinutes() % 15 !== 0)
关于javascript - 一个奇怪的 moment.js 事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52769861/