【JavaScript】为什么说void 0 可以获取安全的undefined值?
在 JavaScript 中,void 0 用于安全地获取 undefined 值,原因如下:
1. undefined 的历史问题
-
在 ES5(2009)之前,
undefined是全局对象的一个可写属性,开发者可以修改它的值:undefined = 123; // 在旧环境中可能成功 console.log(undefined); // 可能输出 123,而不是预期的 undefined -
这会破坏代码逻辑,因为
undefined的本意是表示“未定义”。 -
通过
void 0可以绕过这个问题,因为void始终返回undefined,且无法被篡改。
2. void 运算符的特性
-
void会执行其后的表达式,但无论表达式结果是什么,永远返回undefined。console.log(void 0); // undefined console.log(void "hello"); // undefined console.log(void (1+1)); // undefined -
void 0是最简洁的写法(0是合法且最短的表达式)。
3. 现代环境中的 undefined
-
ES5 之后,全局的
undefined被定义为不可写(non-writable):undefined = 123; // 严格模式下会抛出错误 console.log(undefined); // 输出 undefined -
但局部作用域中仍可能覆盖
undefined:(function() { let undefined = 123; console.log(undefined); // 输出 123 console.log(void 0); // 安全输出 undefined })(); -
void 0在这种情况下仍然可靠。
4. 代码压缩优化
void 0比undefined更短,适合压缩代码:// 压缩前 if (value === undefined) { ... } // 压缩后 if (value===void 0){ ... }
5. 安全性的本质
void 0是 不可变的,不受全局或局部作用域的影响。- 无论环境如何变化,
void 0永远返回undefined。
总结
| 方法 | 安全性 | 可读性 | 兼容性 |
|---|---|---|---|
undefined |
现代环境安全 | 高 | ES5+ 安全 |
void 0 |
绝对安全(任何环境) | 较低 | 所有环境(包括旧) |
- 推荐场景:需要兼容旧代码、避免作用域污染、或代码压缩时使用
void 0。 - 现代场景:在 ES5+ 且严格模式下,直接使用
undefined是安全的。

浙公网安备 33010602011771号