var timeInMs = Date.now();
根据 MDN
与
var timeInMs = new Date(optional).getTime();
根据 MDN。
除了语法和第二个版本中通过可选设置日期(不是当前日期)的能力之外,两者之间还有什么区别吗?
Date.now()
更快 - 查看 jsperf
这些东西是相同的(编辑语义上;使用
.now()
性能会更好一点):
var t1 = Date.now();
var t2 = new Date().getTime();
但是,任何已创建的
Date
实例的时间值在其构造时(或在其设置的任何时间/日期)都会被冻结。也就是说,如果你这样做:
var now = new Date();
然后等待一段时间,随后调用
now.getTime()
将告知设置变量时的时间。
当您执行
(new Date()).getTime()
时,您正在创建一个新的 Date 对象。如果你重复这样做,它会比 Date.now() 慢大约 2 倍
同样的原则也适用于
Array.prototype.slice.call(arguments, 0)
与 [].slice.call(arguments, 0)
是的,这是正确的;使用当前时间时,它们实际上是等效的。
有时,最好以 Date 对象格式保留一些时间跟踪变量,而不是仅保留毫秒数,以便无需重新实例化即可访问 Date 的方法。在这种情况下,Date.now() 仍然胜过 new Date() 等,尽管在我的 Chrome 上仅高出约 20%,而在 IE 上仅高出一点点。
查看我的 JSPERF
timeStamp2.setTime(Date.now()); // set to current;
与
timeStamp1 = new Date(); // set to current;
Date.now() 调用静态方法,这足以成为首选,执行测试:
# cat test.ts
const limit = 10000000 //ten milion
let startTime = Date.now()
let val = 0
for (let i=0; i<=limit; i++) {
const val1 = Date.now()
}
let diff = Date.now() - startTime
console.log('Time Date.now(): ' + diff + ' ms')
startTime = Date.now()
val=0
for (let i=0; i<=limit; i++) {
const val1 = new Date().getTime()
}
diff = Date.now() - startTime
console.log('Time with new Date().getTime: ' + diff + ' ms' )
测试执行:
# node test.ts
Time Date.now(): 818 ms
Time with new Date().getTime: 1625 ms
Date.now() 快了 50%
Date.now()
正在调用类now()
的静态方法Date
。
而new Date().getTime()
可以分为两个步骤:
new Date()
:调用constructor()
类的Date
方法来初始化Date
类的实例。getTime()
方法。Date.now()
分类为 Date
的静态方法,将 Date.prototype.getTime()
分类为实例方法。