Javascript new Date().getTime()和Date.now()

2,033 阅读1分钟

「这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战」。

(为了奖品,努力水文)

在之前的工作中,我最常用的方法大概是new Date().getTime(),后来在准备面试的过程中,有看到另一个方法Date.now()试了下,也能得到正确的结果。

那么他们两个有没有一些执行效率的差别呢?粗略的测试一下

console.time('date gettime')
for(let i = 0; i < 60000; i++) {
  let a = new Date().getTime();
}
console.timeEnd('date gettime')

console.time('date')
for(let i = 0; i < 60000; i++) {
  let a = Date.now();
}
console.timeEnd('date')

执行结果

[Running]
date gettime: 8.113ms
date: 4.15ms

[Running]
date gettime: 44.855ms
date: 4.85ms

当然我们上面的测试是针对循环,测试时下意识会想着多次计算去计算时间差,毕竟可能单次不足以看出差别。但是我也测试了单次

console.time('date gettime')
  new Date().getTime();
console.timeEnd('date gettime')

console.time('date')
  Date.now();
console.timeEnd('date')

测试结果如下

[Running]
date gettime: 0.42ms
date: 0.008ms

那为什么会有这样的差距呢?去mdn搜索了下Date对象。会发现getTime是原型上的方法Date.prototype.getTime(),而now是Date对象本身的方法Date.now()

这些差别可能会现在的计算机来说不算什么,不过我个人可能还是倾向于使用执行效率更好的。比如+和Number()