简短概述
使用date.getTime()
进行比较。
根据我的测试,它比下一个最快的替代方案(date.valueOf()
)至少快25%。
详细信息
我在2022年发现了这个。正如其他人已经说过的那样,像date1.getTime() === date2.getTime()
这样进行比较是正确的方式。
有人在答案中分享了一个jsperf链接,但现在似乎已经失效了,所以我决定自己添加一些性能比较。
我创建了两个包含1000个日期的数组。所有日期都将是不同的实例(这意味着直接使用===
检查会失败),因此这个基准测试的作用是测试将日期转换为原始值的最快方法。
以下是测试数据:
const data1 = Array.from({length: 1000}, () => new Date())
const data2 = Array.from({length: 1000}, () => new Date())
以下是测试用例(链接中还有更多):
data1.forEach((d1, i) => d1.getTime() === data2[i].getTime());
data1.forEach((d1, i) => d1.valueOf() === data2[i].valueOf());
data1.forEach((d1, i) => Number(d1) === Number(data2[i]));
data1.forEach((d1, i) => d1.toISOString() === data2[i].toISOString());
结果(使用date.getTime()
)
date.getTime()
转换速度更快并不意外。它比date.valueOf()
快约25%,比其他所有方法都要快10倍至100倍(据我所知)。
此外,引入可选链会使最佳情况变慢,在我的测试中减缓了近10%的速度。我发现这很有趣。date.valueOf()
相对于其非可选链对应部分也降低了5%的速度。
data1.forEach((d1, i) => d1?.getTime() === data2[i]?.getTime());
Benchmark link: here
以下是一张图片,以防将来上面的链接失效。
![基准测试图像](https://istack.dev59.com/Rgz7V.webp)