void 运算符
void
运算符对给定的表达式进行求值,然后返回 undefined
。
尝试一下
语法
void expression
描述
示例
立即调用的函数表达式
在使用立即调用的函数表达式时,function
关键字不可直接位于语句开头,因为该表达式会被解析为函数声明,并会在解析到代表调用的括号时产生语法错误。如果是匿名函数,那么如果函数被解析为声明,就会立即产生语法错误。
function iife() {
console.log("Executed!");
}(); // SyntaxError: Unexpected token ')'
function () {
console.log("Executed!");
}(); // SyntaxError: Function statements require a function name
为了使函数被解析为表达式,function
关键字必须出现在一个只接受表达式而不是语句的位置。这可以通过在关键字前加一个一元运算符来实现,它只接受表达式作为操作数。函数调用的优先级比一元运算符高,所以它将被首先执行。它的返回值(几乎总是 undefined
)将被传递给一元运算符,然后立即被丢弃。
在所有的一元运算符中,void
提供了最好的语义,因为它明确表示函数调用的返回值应该被丢弃。
void (function () {
console.log("Executed!");
})();
// Output: "Executed!"
这比用圆括号包裹函数表达式要长一些,圆括号的作用是强迫 function
关键字被解析为表达式的开始,而不是语句。
(function () {
console.log("Executed!");
})();
JavaScript URI
当用户点击一个以 javascript:
开头的 URI 时,它会执行 URI 中的代码,然后用返回的值替换页面内容,除非返回的值是 undefined
。void
运算符可用于返回 undefined
。例如:
<a href="javascript:void(0);"> 这个链接点击之后不会做任何事情 </a>
<a href="javascript:void(document.body.style.backgroundColor='green');">
点击这个链接会让页面背景变成绿色。
</a>
备注:利用 javascript:
伪协议来执行 JavaScript 代码是不推荐的,推荐的做法是为链接元素绑定事件。
在箭头函数中避免泄漏
箭头函数标准中,允许在函数体不使用括号来直接返回值。如果右侧调用了一个原本没有返回值的函数,其返回值改变后,则会导致非预期的副作用。安全起见,当函数返回值不会被使用到的时候,应该使用 void
运算符,来确保 API 改变时,并不会改变箭头函数的行为。
button.onclick = () => void doSomething();
这确保了当 doSomething
的返回值从 undefined
变为 true
的时候,不会改变代码的行为。
规范
Specification |
---|
ECMAScript Language Specification # sec-void-operator |
浏览器兼容性
BCD tables only load in the browser