在使用gulp-uglify压缩JavaScript文件之后,我注意到了一些有趣的问题。我传递undefined
到全局IIFE包装器中,我看到它被改成了void 0
。什么是void 0?我在控制台上运行它并返回undefined,这很有趣!这让我很好奇,所以我开始对void 0进行测试。在我的控制台测试中(简单的循环和时间戳),我观察到使用void 0
而不是undefined
可以提高180倍的速度,具体取决于浏览器。是否有人知道为什么检查void 0会更快?
(function(start, x, z){
for (var i=0; i<z; i++){
if (x === undefined){}
}
console.info('t1 ', Date.now() - start);
start = Date.now();
for (var i=0; i<z; i++){
if (x === void 0){}
}
console.info('t1 ', Date.now() - start);
})(Date.now(), '', 1e6)
undefined
是一个原始值,但是当使用标识符时,它通过全局变量进行访问。 - user8897421undefined
没有被遮蔽,因此可以优化作用域链遍历。 - user8897421void 0
是一个表达式(使用void
运算符),它返回原始值undefined
,就像 SterlingArcher 所写的一样。 - user8897421void
关键字在其后运行表达式,所以for循环做了一些事情:每次迭代都会运行0!其次,我尝试使用创建和删除DOM元素的相同代码来执行更多操作。这里是fiddle。 - Davide Cannizzo