void操作符
产生式 UnaryExpression : void UnaryExpression 按如下流程解释:
- 令 expr 为解释执行UnaryExpression的结果。
- 调用 GetValue(expr).
- 返回 undefined.
注意:GetValue一定要调用,即使它的值不会被用到,但是这个表达式可能会有副作用(side-effects)。
so:
function x() {
var undefined = 'hello world',
f = {},
window = {
'undefined': 'joke'
};
console.log(undefined);// hello world
console.log(window.undefined); //joke
console.log(f.a === undefined); //false
console.log(f.a === void 0); //true
}
除了采用void
能保证取到undefined值以外,还有其它方法吗?有的,还有一种方式是通过函数调用。如AngularJS的源码里就用这样的方式:
(function(window, document, undefined) {
//.....
})(window, document);
so:
总结:
- 通过采用
void 0
取undefined
比采用字面上的undefined
更靠谱更安全,应该优先采用void 0
这种方式。 -
填充
<a>
的href
确保点击时不会产生页面跳转; 填充<image>
的src
,确保不会向服务器发出垃圾请求。