void运算符总是返回undefined,不改变变量值或内存状态,仅丢弃表达式结果;它用于IIFE防解析错误、javascript:void(0)阻止跳转,且比直接写undefined更安全可靠。
它总是返回 undefined,不管右边表达式是什么。这不是“清空值”或“销毁变量”,只是求值后强制丢弃结果、固定返回 undefin。
ed
常见误解是把它当“释放内存”或“重置变量”,其实完全无关——void 不影响任何变量的生命周期或值,只影响当前表达式的返回值。
void 0、void false、void "hello" 全部等价于 undefined
undefined 更可靠:在旧版 IE 中全局 undefined 可被覆盖,而 void 0 永远安全void (x = 1) 才能确保赋值执行后再丢弃结果避免函数声明被解析为函数语句(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 字符阻止浏览器跳转或刷新页面,同时不触发任何副作用——它不是“防止默认行为”的万能解,而是利用了 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