void运算符求值并丢弃结果,统一返回undefined;它不改变执行逻辑,只切断返回值传递链,常用于IIFE、javascript:URL及调试中禁用返回值。

void 运算符的作用不是“强制返回 undefined”,而是**求值并丢弃结果,统一返回 undefined**。它不改变表达式的执行逻辑,只切断返回值的传递链。
void 的本质:求值 + 丢弃
void 是一元运算符,语法为 void expression。它会:
- 先完整计算右侧表达式(包括副作用,如函数调用、赋值、DOM 操作等)
- 忽略该表达式的计算结果(无论原结果是数字、对象、null 还是其他值)
- 无条件返回 undefined(严格来说是全局原始值 undefined,不是变量)
常见用途与典型场景
void 主要用于需要“执行但不想要返回值”的上下文,例如:
-
立即执行函数表达式(IIFE)前加 void 防止被误解析为函数声明:
void function(){ console.log('run'); }(); // 安全,不会报错 -
HTML 中的 javascript: URL 避免页面跳转或刷新:
<a href="javascript:void(0)" onclick="doSomething()">点击</a>
不写 void 时,若 doSomething() 返回字符串,浏览器可能把该字符串当作新 URL 加载;加 void 后确保返回 undefined,页面不跳转。 -
调试时临时禁用返回值干扰:
void console.log('debug'), x = 42; —— 利用逗号表达式执行 log 并丢弃其返回值,不影响后续赋值。
注意:void 不等于 undefined,也不阻止副作用
有人误以为 void 能“让表达式变成 undefined”,其实不然:
立即学习“Java免费学习笔记(深入)”;
- void 0 和 void (x = 5) 都返回 undefined,但后者中 x = 5 已执行,x 被赋值了
- void alert('hi') 仍会弹窗,只是返回值被丢弃为 undefined
- void 不是类型转换操作符,它不修改原始值,也不参与类型判断(比如 typeof void 0 === 'undefined' 是因为返回值确实是 undefined)
和其它 undefined 获取方式的区别
对比几种获取 undefined 的写法:
- void 0:最短、最可靠,不依赖全局 undefined 是否被重写
- undefined(字面量):ES5+ 环境下是只读的,但旧环境或非严格模式下可能被覆盖(var undefined = 'hacked';)
- void 0 在压缩工具中也常被替换成更短形式(如 !0 && void 0 → void 0),因其语义明确且无副作用风险









