先说结论:3.3倍
测试代码如下:
const calcTimeConsuming = (fn) => {
const res = [];
for(let k = 0 ; k< 100; k++){
let start = Date.now();
for(let i = 0 ; i< 1000; i++){
for(let j = 0 ; j< 1000; j++){
fn()
}
}
res.push(Date.now() - start);
}
return res.reduce((total,cur)=>total+cur,0) / res.length;
}
let sumV1;
let sumV2;
const v1 = () => {
sumV1 = +new Date();
}
const v2 = () => {
sumV2 = Date.now();
}
const v1ava = calcTimeConsuming(v1);
const v2ava = calcTimeConsuming(v2);
console.log(`调用+new Date()100万次的平均耗时:${v1ava}`);
console.log(`调用Date.now()100万次的平均耗时:${v2ava}`);
原因分析
+new Date();
1.创建对象
2.+操作隐式类型转换,调用 对象||Object.getPrototypeOf(对象) 的 [Symbol.toPrimitive] || valueOf 方法
这两步的耗时如下: