gpt4 book ai didi

javascript - MomentJS 如何使用 > 和 <(和 >=、<=)比较值?

转载 作者:数据小太阳 更新时间:2023-10-29 04:31:04 24 4
gpt4 key购买 nike

我在当前项目中使用 moment.js,我发现比较运算符 <,>,>=,<= 工作正常。然而 == 没有。

令我感到惊讶的是,这些功能有效而且您不需要使用 .isBefore() 和 .isAfter() 函数。

任何人都可以简要说明为什么这些有效吗?是否也可以使 == 工作?

谢谢。

最佳答案

这是由于comparison and equality operators在 JavaScript 工作中(强调我的):

For relational abstract comparisons (e.g., <=), the operands are first converted to primitives, then to the same type, before comparison.

[...]

The equality operator converts the operands if they are not of the same type, then applies strict comparison. If either operand is a number or a boolean, the operands are converted to numbers if possible; else if either operand is a string, the string operand is converted to a number if possible. If both operands are objects, then JavaScript compares internal references which are equal when operands refer to the same object in memory.

所以当两个矩对象与不等式进行比较时,首先将它们转换为数字。对于 Moment.js 对象,这是自 1970 年 1 月 1 日午夜 UTC 的 unix 纪元以来的毫秒数。

在您最喜欢的浏览器的控制台窗口/节点 REPL 中:

> +moment()
<- 1412332710977

对于 == 相等性检查,运行时在两个对象之间进行引用比较,对于两个不同的时刻实例返回 false,即使它们都是为了相同的日期/时间。

JavaScript 中缺少默认的 .equals()operator==() 重载使得这种行为相当违反直觉,尤其是当您来自其他语言。

另请注意,Moment 的 isBefore/isAfter 函数真的很慢,因为它们在内部克隆两个 moment 对象在进行比较之前(这是因为 isBefore/isAfter 有一个可选参数来指定要比较的时间组件(例如 'hour') 并且无论此参数是否存在,它都会进行克隆)。

Moment 在这里受到可变对象的影响,这就是为什么它首先要进行防御性 clone(),然后进一步避免优化实际上不必要的公共(public)路径。

关于javascript - MomentJS 如何使用 > 和 <(和 >=、<=)比较值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23019702/

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