那些前端老鸟才知道的秘密

前端老鸟才知道的秘密:void(0),这东西到底有什么用

那天我盯着同事的代码看了半天,心里默念:这货是不是写错了?

前几天 review 代码,看到一个小年轻写了这么一行:

ini 复制代码
const foo = void 0;

我当时就乐了,心想:" 这孩子是不是被产品经理逼疯了?直接写undefined不香吗?非得整这出?"

但转念一想,不对啊,这写法我好像在哪儿见过... 仔细一琢磨,卧槽,这不就是前端老司机的暗号吗!

所以,void 0 到底是个啥?

简单来说,void 0就是强行返回 undefined的一种写法。

你可能会问:"那我直接写 undefined 不就完事了?干嘛要多此一举?"

问得好!这就要从前端开发的 "血泪史" 说起了。

那些年被 undefined 坑过的日子

在 JavaScript 的远古时期(其实就是 ES5 之前),undefined 这个变量是可以被重写的!

没错,你没听错,就是那个表示 "未定义" 的 undefined,它自己都可能被定义成别的东西...

javascript 复制代码
// 在古老的浏览器里,你可以这么玩(现在别试了)
undefined = "我是谁?我在哪?";
console.log(undefined); // 输出:"我是谁?我在哪?"

这就很尴尬了 ------ 你用来判断是否未定义的变量,自己都可能被篡改!

这时候,void 0就闪亮登场了。

void 0 的三大绝技

1. 绝对安全的 undefined

void操作符有个特点:不管后面接什么,都返回 undefined

csharp 复制代码
void 0 // undefined
void "hello" // undefined  
void {} // undefined
void function(){} // undefined

所以void 0就成了获取真正 undefined 的最可靠方式。

2. 阻止链接跳转的老司机

还记得以前写<a href="javascript:void(0)">吗?这就是为了防止点击链接后页面跳转。

虽然现在大家都用event.preventDefault()了,但这可是老一辈前端人的集体记忆啊!

3. 立即执行函数的替代方案

有些老代码里你会看到:

csharp 复制代码
void function() {
  // 立即执行的代码
}();

这其实是为了避免函数声明被误认为是语句开头。

现在还需要 void 0 吗?

说实话,在现代前端开发中,直接用undefined已经足够安全了。ES5 之后的规范规定 undefined 是只读的,不能再被重写。

但为什么还有老司机在用 void 0 呢?

  1. 习惯成自然:用了十几年,改不过来了
  2. 代码压缩void 0undefined字符更少
  3. 装逼必备:一看就是用 void 0 的,肯定是老鸟(手动狗头)

所以,到底用不用?

我的建议是:知道为什么用,比用什么更重要

如果你是为了代码风格统一,或者团队约定,用 void 0 没问题。

如果只是为了装老司机... 兄弟,真没必要。现在面试官看到 void 0,第一反应可能是:"这人是刚从 jQuery 时代穿越过来的吗?"


最后送大家一句话:技术选型就像穿衣服,合适比时髦更重要。 知道每个工具为什么存在,比你盲目跟风要强得多。

相关推荐
醉城夜风~1 小时前
CSS元素显示模式(display)
前端·css
AI大模型-小华2 小时前
Codex 三方充值快速入门指南
java·前端·数据库·chatgpt·ai编程·codex·chatgpt pro
做前端的娜娜子4 小时前
同一链接实现 PC Web 与移动 H5 自适应
前端·掘金·金石计划
小帅不太帅4 小时前
架构没变、规模没变,DeepSeek V4 Flash 正式版凭什么暴涨 47 分?
前端·aigc·deepseek
jarvisuni4 小时前
DeepSeekFlash前端依旧拉垮,而且变慢了很多!
前端·javascript·算法
卷福同学6 小时前
AI编程出海第二步:验证关键词能否做站
前端·人工智能·后端
赵庆明老师6 小时前
Vben精讲:21-详解web-antd:tsconfig.json
前端·json·vim
wc886 小时前
微软EDGE浏览器功能学习
前端·学习·edge
Csvn7 小时前
🎯 原生 `<dialog>` 元素:终于可以扔掉一半的自定义弹窗组件了?
前端