【发布时间】:2017-11-30 03:29:40
【问题描述】:
在我的级联 javascript 上使用 gulp-uglify 后,我注意到了一些有趣的事情。我将undefined 传递给全局IIFE 包装器,我看到它正在将其更改为void 0。 void 0 到底是什么?我在控制台中运行它并返回未定义。有趣的!这让我很好奇,所以我开始在 void 0 上运行测试。在我的控制台测试(简单循环和时间戳)中,我观察到速度提高了 180 倍,具体取决于浏览器,检查 void 0 而不是 undefined。有谁知道为什么检查 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)
【问题讨论】:
-
不,void 0 是原语,undefined 是全局变量。
-
值
undefined是一个原语,但在使用标识符时是通过全局变量访问的。 -
总体而言,以大量盐分进行微基准测试。他们很难做到正确。一个单一的测试不应该太有说服力。而且我认为大多数实现可以静态确定全局
undefined没有被遮蔽,因此优化范围链遍历。 -
@user2612030:
void 0是一个表达式(使用void运算符),它返回原始undefined,就像SterlingArcher 写的那样。 -
@Pointy,你错了:先点,
void关键字在其自身之后运行表达式,所以 for 做了一些事情:每次迭代运行 0!第二点,我尝试了相同的代码,但在 DOM 中创建和删除元素,以便为每次迭代做更多的事情。这是fiddle。