ZetCode

JavaScript void 关键字

最后修改于 2025 年 4 月 16 日

在本文中,我们将探讨 JavaScript 中的 void 关键字。void 运算符计算一个表达式并返回 undefined。

void 关键字

void 运算符计算任何给定的表达式,然后返回 undefined。它是一个一元运算符,位于其操作数之前。操作数可以是任何类型。 void 运算符在现代 JavaScript 中很少使用。

void 的主要用途是获取 undefined 原始值。当您希望确保表达式没有返回值时,这很有用。它还可以防止在某些上下文中出现不希望的行为。

void 常见于较旧的 JavaScript 代码中,尤其是在 javascript: URL 中。现代 JavaScript 实践已经减少了它的使用。然而,理解 void 对于旧代码仍然很重要。

基本的 void 用法

void 最简单的用法是计算一个表达式并返回 undefined。

main.js
const result = void(5 + 3);
console.log(result);

在这里,void 计算表达式 (5 + 3) 但丢弃结果。变量 result 被赋值为 undefined。计算发生了,但结果没有被使用。

$ node main.js
undefined

void 与函数调用

void 可用于调用函数,同时忽略它们的返回值。

main.js
function greet() {
    console.log('Hello!');
    return 'Greeting complete';
}

const output = void greet();
console.log(output);

greet 函数执行并记录 'Hello!',但其返回值被丢弃。output 变量从 void 运算符接收 undefined。

$ node main.js
Hello!
undefined

void 在 href 属性中

void 的一个传统用法是在 javascript: URL 中以防止导航。

index.html
<a href="javascript:void(0)" onclick="alert('Clicked!')">
    Click me
</a>

这可以防止在单击链接时页面导航。 void(0) 返回 undefined,这会阻止默认的链接行为。 onclick 处理程序仍然正常执行。

void 与 IIFE

void 可用于立即调用函数表达式 (IIFE)。

main.js
void function() {
    console.log('IIFE executed');
}();

这种模式确保函数的返回值(如果有)被丢弃。 void 运算符明确表明 IIFE 的目的仅是副作用。这是用括号包裹的替代方案。

$ node main.js
IIFE executed

void vs undefined

void 总是返回 undefined,但这与直接使用 undefined 并不相同。

main.js
const a = void 0;
const b = undefined;

console.log(a === b);
console.log(typeof a);
console.log(typeof b);

两个变量都包含 undefined 并且是相等的,但是 void 是一个运算符,而 undefined 是一个原始值。在现代 JS 中,直接使用 undefined 比 void 0 更好。

$ node main.js
true
undefined
undefined

void 在箭头函数中

void 可用于箭头函数以确保它们返回 undefined。

main.js
const logMessage = (msg) => void console.log(msg);
const result = logMessage('Hello void');
console.log(result);

箭头函数记录消息,但由于 void 而返回 undefined。这种模式明确表明函数不应该返回值。这比只调用 console.log 而没有 void 更清晰。

$ node main.js
Hello void
undefined

void 与异步函数

void 可用于异步函数以忽略它们的 promise。

main.js
async function fetchData() {
    // Simulate API call
    return { data: 'Sample data' };
}

void fetchData().then(() => console.log('Data fetched'));
console.log('Continuing execution');

在这里,void 用于执行异步操作而不处理 promise。代码立即继续执行。这种模式对于 fire-and-forget 异步操作很有用。

$ node main.js
Continuing execution
Data fetched

来源

void - 语言参考

在本文中,我们已经演示了如何在 JavaScript 中使用 void 关键字来计算表达式而无需返回值。

作者

我叫 Jan Bodnar,是一位充满激情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。到目前为止,我已经撰写了 1,400 多篇文章和 8 本电子书。我拥有超过十年的编程教学经验。

查看 所有 JavaScript 教程。