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!");
}();
// Logs "Executed!"
这比将函数表达式包装在括号中稍微长一些,这具有相同的强制将 function
关键字解析为表达式而不是语句的开始的效果。
(function () {
console.log("Executed!");
})();
JavaScript URI
当浏览器跟随 javascript:
URI 时,它会计算 URI 中的代码,然后用返回值替换页面的内容,除非返回值为 undefined
。 void
运算符可用于返回 undefined
。 例如
<a href="javascript:void(0);">Click here to do nothing</a>
<a href="javascript:void(document.body.style.backgroundColor='green');">
Click here for green background
</a>
注意: javascript:
伪协议不鼓励使用其他替代方案,例如非侵入式事件处理程序。
非泄漏箭头函数
箭头函数引入了一种简短的无括号语法,它返回一个表达式。 如果表达式是一个函数调用,并且返回值从 undefined
更改为其他值,则这会导致意想不到的副作用。
例如,如果以下代码中的 doSomething()
返回 false
,则单击复选框时,复选框将不再被标记为选中或未选中(从处理程序返回 false
会禁用默认操作)。
checkbox.onclick = () => doSomething();
这很可能不是预期的行为! 为了安全起见,当函数的返回值不打算使用时,可以将其传递给 void
运算符,以确保(例如)更改 API 不会导致箭头函数的行为发生变化。
checkbox.onclick = () => void doSomething();
规范
规范 |
---|
ECMAScript 语言规范 # sec-void-operator |
浏览器兼容性
BCD 表仅在浏览器中加载。