gpt4 book ai didi

javascript - 一个奇怪的 moment.js 事情

转载 作者:行者123 更新时间:2023-11-30 20:07:20 25 4
gpt4 key购买 nike

所以我在 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

所以它的评估过程如下

  1. moment(inTime).format('m') 给出字符串“0”
  2. !moment(inTime).format('m') 给出 bool 值 false,因为“0”为真
  3. ((!moment(inTime).format('m')) % 15)给出数字0,false转换为数字后(0) 并计算模数
  4. ((!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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com