void运算符总是返回undefined,不改变变量值或内存状态,仅丢弃表达式结果;它用于IIFE防解析错误、javascript:void(0)阻止跳转,且比直接写undefined更安全可靠。

void 运算符到底返回什么
它总是返回 undefined,不管右边表达式是什么。这不是“清空值”或“销毁变量”,只是求值后强制丢弃结果、固定返回 undefined。
常见误解是把它当“释放内存”或“重置变量”,其实完全无关——void 不影响任何变量的生命周期或值,只影响当前表达式的返回值。
-
void 0、void false、void "hello"全部等价于undefined - 它比直接写
undefined更可靠:在旧版 IE 中全局undefined可被覆盖,而void 0永远安全 - 运算符优先级较低,常需括号:比如
void (x = 1)才能确保赋值执行后再丢弃结果
为什么在 IIFE 前加 void
避免函数声明被解析为函数语句(Function Statement),强制 JavaScript 引擎按函数表达式(Function Expression)处理,从而允许立即调用。
不加 void 时:
function() { console.log('hi'); }() 会报 SyntaxError: Unexpected token '(',因为引擎认为这是非法的函数声明语法。
立即学习“Java免费学习笔记(深入)”;
-
void function() { ... }()合法:void让整个结构变成表达式,括号才被允许 - 其他等效写法还有:
!function(){}()、+function(){}()、(function(){})(),但void最语义清晰——明确表示“我不关心返回值” - 现代代码普遍用
(function(){})(),但void在压缩工具(如 UglifyJS)中更省字节:void比(和)总共少 1 字符
void 在 href="javascript:void(0)" 中的真实作用
阻止浏览器跳转或刷新页面,同时不触发任何副作用——它不是“防止默认行为”的万能解,而是利用了 javascript: 伪协议的执行机制。
点击链接时,浏览器会执行 javascript: 后面的代码,并把返回值当作新 URL 加载;若返回 undefined,则不跳转。
-
href="javascript:void(0)"→ 执行void 0→ 返回undefined→ 页面停留 -
href="javascript:0"也有效(返回数字 0,非字符串,不会触发跳转),但语义模糊 - ⚠️ 现代开发应避免这种写法:它对键盘导航、屏幕阅读器不友好,且无法禁用右键保存;推荐用
event.preventDefault()+或带role="button"的元素
容易被忽略的陷阱
void 是一元运算符,不能省略操作数;而且它不阻止表达式本身的副作用——只管“扔掉返回值”,不管“有没有执行”。
-
void console.log('side effect')依然会打印日志,只是返回undefined -
void delete obj.key会真正删除属性,然后返回undefined - 在严格模式下,
void this返回undefined(而非全局对象),这点和非严格模式不同 - 不要用
void替代条件判断:比如if (void x) {...}永远为假,因为void总是返回undefined,而undefined是 falsy










