这几天在github的源码中看到了很多 result == void 0
的判断,起了好奇心,这句话是啥意思?
为啥经常出现在代码中,于是马上行动起来,Google一搜第一条就是*的回答,看完后恍然大悟,写下这篇心得分享给大家。
语法
void expression
MDN的描述
能向期望一个表达式的值是
undefined
的地方插入会产生副作用的表达式。也就是为了避免产生某种副作用,将一个为undefined
的值转换为void
表达式
作用
避免undefined的重定义
由于undefined不是个关键字,es5以前可以将变量名undefined赋予一个变量,这时将会改变undefined的作用,在很多源码库中都使用了void(0)代替undefined。这个bug被支持es5及更高版本的浏览器修复了,IE8中仍存在这个问题,eg:
alert(undefined); // undefined
var undefined = "various";
alert(undefined); // various
节省代码库的体积
void 0
比undefined
更简短,对于浏览器来说这能减少很多字节。
可作为一个函数表达式
在使用立即执行的函数表达式时,可以利用void运算符让JavaScript引擎把一个函数识别成函数表达式而不是函数声明(语句)。
void function iife() {
var bar = function () {};
var baz = function () {};
var foo = function () {
bar();
baz();
};
foo();
}();
JavaScript URLs
当用户点击一个以JavaScript:URL时,浏览器对冒号后面的代码求值,然后把求值的结果显示在页面上,这时页面基本上是一大片空白,这通常不是我们想要的。只有当冒号后面的代码是undefined时,浏览器才不会做这件事,我们经常会用void运算符来实现这个需求。像下面这样:
<a href="javascript:void(0);">
Click here to do something
</a>