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。
const result = void(5 + 3); console.log(result);
在这里,void 计算表达式 (5 + 3) 但丢弃结果。变量 result 被赋值为 undefined。计算发生了,但结果没有被使用。
$ node main.js undefined
void 与函数调用
void 可用于调用函数,同时忽略它们的返回值。
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 中以防止导航。
<a href="javascript:void(0)" onclick="alert('Clicked!')"> Click me </a>
这可以防止在单击链接时页面导航。 void(0) 返回 undefined,这会阻止默认的链接行为。 onclick 处理程序仍然正常执行。
void 与 IIFE
void 可用于立即调用函数表达式 (IIFE)。
void function() { console.log('IIFE executed'); }();
这种模式确保函数的返回值(如果有)被丢弃。 void 运算符明确表明 IIFE 的目的仅是副作用。这是用括号包裹的替代方案。
$ node main.js IIFE executed
void vs undefined
void 总是返回 undefined,但这与直接使用 undefined 并不相同。
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。
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。
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
来源
在本文中,我们已经演示了如何在 JavaScript 中使用 void 关键字来计算表达式而无需返回值。