void 運算子

Baseline 已廣泛支援

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 ⁨2015 年 7 月⁩以來,各瀏覽器均已提供此特性。

void 運算子會計算給定的 expression,然後返回 undefined

試一試

const output = void 1;
console.log(output);
// Expected output: undefined

void console.log("expression evaluated");
// Expected output: "expression evaluated"

void (function iife() {
  console.log("iife is executed");
})();
// Expected output: "iife is executed"

void function test() {
  console.log("test function executed");
};
try {
  test();
} catch (e) {
  console.log("test function is not defined");
  // Expected output: "test function is not defined"
}

語法

js
void expression

描述

此運算子允許在需要表示式計算結果為 undefined 的地方,計算產生值的表示式。

void 運算子通常僅用於獲取 undefined 基本型別值,通常使用 void(0)(等同於 void 0)。在這些情況下,可以使用全域性變數 undefined

需要注意的是,void 運算子的優先順序應該被考慮到,並且括號可以幫助澄清 void 運算子後面的表示式的解析。

js
void 2 === "2"; // (void 2) === '2', returns false
void (2 === "2"); // void (2 === '2'), returns undefined

示例

立即呼叫函式表示式

在使用立即呼叫函式表示式時,function 關鍵字不能直接出現在語句的開頭,因為這會被解析為函式宣告,當遇到表示呼叫的括號時會產生語法錯誤——如果函式是匿名的,當函式被解析為宣告時,會立即產生語法錯誤。

js
function iife() {
  console.log("Executed!");
}(); // SyntaxError: Unexpected token ')'

function () {
  console.log("Executed!");
}(); // SyntaxError: Function statements require a function name

為了使函式被解析為表示式function 關鍵字必須出現在只接受表示式而不是語句的位置。這可以透過在關鍵字前加上一元運算子來實現,一元運算子只接受表示式作為運算元。函式呼叫比一元運算子具有更高的優先順序,因此它會首先執行。它的返回值(幾乎總是 undefined)將被傳遞給一元運算子,然後立即丟棄。

在所有一元運算子中,void 提供了最好的語義,因為它清楚地表明函式呼叫的返回值應該被丟棄。

js
void function () {
  console.log("Executed!");
}();

// Logs "Executed!"

這比用括號包裹函式表示式要長一些,但它們具有相同的效果,即強制將 function 關鍵字解析為表示式的開始而不是語句。

js
(function () {
  console.log("Executed!");
})();

請注意,此技巧僅適用於使用 function 關鍵字定義的 IIFE。嘗試使用 void 運算子來避免箭頭函式的括號會導致語法錯誤。箭頭函式表示式在被呼叫時總是需要用括號括起來。

js
void () => { console.log("iife!"); }(); // SyntaxError: Malformed arrow function parameter list

JavaScript URI

當瀏覽器遵循 javascript: URI 時,它會評估 URI 中的程式碼,然後用返回值替換頁面內容,除非返回值是 undefinedvoid 運算子可用於返回 undefined。例如:

html
<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 會停用預設操作)。

js
checkbox.onclick = () => doSomething();

這不太可能是期望的行為!為了安全起見,當不打算使用函式的返回值時,可以將其傳遞給 void 運算子,以確保(例如)API 的更改不會導致箭頭函式的行為發生變化。

js
checkbox.onclick = () => void doSomething();

規範

規範
ECMAScript® 2026 語言規範
# sec-void-operator

瀏覽器相容性

另見