简单版
void是一个一元操作符,根据MDN的说法
The void operator evaluates the given expression and then returns undefined.
void操作符会对给定表达式求值,然后返回undefined
也就是说无论表达式是什么,void都会返回一个undefined:
那么有什么用呢?
第一个用途,用来代替undefined
与很多人以为的不一样,undefined实际上并不是js的保留字,尽管ES5中undefined已经变成了全局对象的一个只读属性,但在局部作用域中仍然可以被重写。
这就带来很多隐患。
为了解决这个问题我们可以使用void无论怎么样都返回undefined的特性,在需要undefined的时候使用void 0
代替。
至于为什么用void 0
而不用void(0)
,void 'hello,world!'
,主要是因为void 0
短。这意味着尽管未来undefined会变成保留字,void 0
也仍然会有用武之地,事实上很多压缩工具就是直接用void 0
代替代码中的undefined。
第二个用途,用在Javascript URIs
在浏览器处理javascript: URI
时,他会对URL那的代码求值然后用返回值替换页面上的内容,除非返回的是undefined。而void就可以帮我们返回undefined。
不过现在javascript:
已经不被推荐,虽然我并不知道为何不推荐= =
第三个用途,避免立即执行函数出错
通常我们写立即执行函数的时候都会加括号,例如这样:
不过有的人为了省力气往往省略这个括号,省略本来并没有问题,不过这有时候会被js解释器错误的认为这是在函数声明。
通过在function前面加上void可以避免这种情况。
|
|
事实上不只可以加void,也可以用!
,+
等一元操作符替代。
复杂版
其实void在ECMAScript中的解释是这样的:
- Let expr be the result of evaluating
UnaryExpression.- Call GetValue(expr).
- Return undefined.
由于里面涉及了一些比较深入的js知识,我现在并不太清楚究竟做了什么。待日后更新。