--- title: void 运算符 slug: Web/JavaScript/Reference/Operators/void tags: - JavaScript - Unary translation_of: Web/JavaScript/Reference/Operators/void ---
{{jsSidebar("Operators")}}

void 运算符 对给定的表达式进行求值,然后返回 {{jsxref("Global_Objects/undefined", "undefined")}}。

语法

void expression

描述

这个运算符能向期望一个表达式的值是{{jsxref("Global_Objects/undefined", "undefined")}}的地方插入会产生副作用的表达式。

void 运算符通常只用于获取 undefined的原始值,一般使用void(0)(等同于void 0)。在上述情况中,也可以使用全局变量{{jsxref("Global_Objects/undefined", "undefined")}} 来代替(假定其仍是默认值)。

立即调用的函数表达式

在使用立即执行的函数表达式时,可以利用 void 运算符让 JavaScript 引擎把一个function关键字识别成函数表达式而不是函数声明(语句)。

void function iife() {
    var bar = function () {};
    var baz = function () {};
    var foo = function () {
        bar();
        baz();
     };
    var biz = function () {};

    foo();
    biz();
}();

JavaScript URIs

当用户点击一个以 javascript: 开头的URI 时,它会执行URI中的代码,然后用返回的值替换页面内容,除非返回的值是{{jsxref("Global_Objects/undefined", "undefined")}}。void运算符可用于返回{{jsxref("Global_Objects/undefined", "undefined")}}。例如:

<a href="javascript:void(0);">
  这个链接点击之后不会做任何事情,如果去掉 void(),
  点击之后整个页面会被替换成一个字符 0。
</a>
<p> chrome中即使<a href="javascript:0;">也没变化,firefox中会变成一个字符串0 </p>
<a href="javascript:void(document.body.style.backgroundColor='green');">
  点击这个链接会让页面背景变成绿色。
</a>

注意,虽然这么做是可行的,但利用 javascript: 伪协议来执行 JavaScript 代码是不推荐的,推荐的做法是为链接元素绑定事件。

在箭头函数中避免泄漏

箭头函数标准中,允许在函数体不使用括号来直接返回值。 如果右侧调用了一个原本没有返回值的函数,其返回值改变后,则会导致非预期的副作用。 安全起见,当函数返回值是一个不会被使用到的时候,应该使用 void 运算符,来确保返回 {{jsxref("Global_Objects/undefined", "undefined")}}(如下方示例),这样,当 API 改变时,并不会影响箭头函数的行为。

button.onclick = () => void doSomething();

确保了当 doSomething 的返回值从 {{jsxref("Global_Objects/undefined", "undefined")}} 变为 true 的时候,不会改变函数的行为

规范

Specification Status Comment
{{SpecName('ESDraft', '#sec-void-operator', 'The void Operator')}} {{Spec2('ESDraft')}}
{{SpecName('ES6', '#sec-void-operator', 'The void Operator')}} {{Spec2('ES6')}}
{{SpecName('ES5.1', '#sec-11.4.2', 'The void Operator')}} {{Spec2('ES5.1')}}
{{SpecName('ES3', '#sec-11.4.2', 'The void Operator')}} {{Spec2('ES3')}}
{{SpecName('ES1', '#sec-11.4.2', 'The void Operator')}} {{Spec2('ES1')}} Initial definition. Implemented in JavaScript 1.1

浏览器兼容

{{Compat("javascript.operators.void")}}

相关链接