void运算符本身不阻止默认跳转,但href="javascript:void(0)"因返回undefined使浏览器无法将其当URL处理,从而实现不跳转;推荐改用button元素或event.preventDefault()。

在 JavaScript 中,void 运算符本身**不直接“阻止默认跳转”**,但它常被用在 <a> 标签的 href 属性中(如 href="javascript:void(0)"),起到**让链接点击后不跳转、也不刷新页面**的效果。它的作用本质是:执行表达式并**强制返回 undefined**,从而避免浏览器把 JavaScript 表达式的返回值当作 URL 处理。
为什么 void 0 能防止跳转?
浏览器对 <a href="..."> 的行为规则是:
- 如果
href是普通 URL(如"https://example.com"),点击就导航; - 如果
href是javascript:xxx形式,浏览器会执行xxx并**试图把执行结果当作新 URL 加载**; - 若执行结果是字符串(比如
"hello"),浏览器会尝试跳转到about:blank#hello(或报错); - 而
void总是返回undefined—— 它不是字符串,也不是有效 URL,浏览器无法跳转,于是**什么也不做**。
常见写法及对比
以下都是让链接“不跳转”的写法,但推荐程度不同:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
-
href="javascript:void(0)":经典写法,语义清晰,返回undefined,安全可靠; -
href="#":会跳到页面顶部(触发scrollTo(0,0)),非预期行为; -
href="javascript:;":分号构成空语句,返回undefined,可行但可读性差; -
href="javascript:return false;":语法错误(return只能在函数内),不可用; -
href="javascript:void(function(){...}())":可执行逻辑,但仍以undefined结束,不跳转。
更现代、更推荐的做法
虽然 void 0 有效,但 HTML + JS 分离和可访问性更重要:
立即学习“Java免费学习笔记(深入)”;
-
用
button替代a:如果是纯交互(如展开菜单、提交表单),语义上应使用<button type="button">,它天生不跳转; -
用
event.preventDefault():在 JS 中监听点击,显式阻止默认行为,更可控、可维护;
<a href="/old-page" id="myLink">点我</a>
<script>document.getElementById("myLink").onclick = e => e.preventDefault();</script> -
设置
href="javascript:void(0)"同时加role="button"和tabindex="0":提升键盘可访问性(否则<a>没href值时无法聚焦)。
注意事项
不要滥用 void:
-
void不阻止事件冒泡,只影响href的导航行为; - 在严格模式或模块环境中,
javascript:void(0)不影响脚本执行,但仍是“伪协议”,SEO 和无障碍工具可能忽略或警告; - 若需兼容旧浏览器(如 IE8),
void 0是安全的(void自 ECMAScript 1 就存在); - 避免写成
href="javascript:void(0); doSomething()"—— 分号后代码不会执行(void只管其后的表达式)。

















