在JavaScript中,
undefined
是一个全局的内建值,表示一个未定义的变量或属性。而void
是一个运算符,将表达式的值转换为undefined
。在一些特定的情况下,使用void 0
可以用来替代undefined
var null
// 报错 Uncaught SyntaxError: Unexpected token 'null'
var true
// 报错 Uncaught SyntaxError: Unexpected token 'true'
var false
// 报错 Uncaught SyntaxError: Unexpected token 'false'
var undefined
// 正常定义
通过上面的代码我们可以看出,null
、true
、false
都不能被定义,这是因为它们都属于js的关键字,因此不能被定义。但undefined
是可以正常被定义的,我们继续深究一下变量undefined
console.log(window.undefined)
// 输出 undefined
console.log(undefined in window)
// 输出 true
console.log("undefined" in window)
// 输出 true
var undefined = 10;
console.log(undefined);
// 输出 undefined
通过上面的代码我们可以看出,变量undefined
是一个全局属性,且是一个只读属性,不能被修改。这样我们直接使用undefined
看似不会出现问题,这是因为在全局作用域
。但在函数作用域中
会发生什么呢?我们一起看一下:
function a() {
var undefined = 10;
console.log(undefined);
}
a();
// 输出 10
通过上面的代码我们可以看出,在函数作用域
,变量undefined
既可以被声明,也可以被重新赋值。那这样我们直接使用undefined
就可能会出现一些意想不到的问题,这时候就推荐使用void 0
来代替undefined
var x = void 0;
console.log(x);
// 输出 undefined
function foo() {
return void 0;
}
var y = foo();
console.log(y);
// 输出 undefined
总结一下,void 0
来代替undefined
的原因:
- 避免被重新定义: 在某些情况下,
undefined
可能会被重新定义。尽管这是很少见的情况,但使用void 0
可以确保得到一个真正的undefined
值,而不是被修改后的值 - 简洁和可读性:
void 0
是一个短小精悍的表达式,使用它可以减少代码的长度。此外,void 0
也可以让代码更加易读,因为开发者可以清楚地知道你的意图是获取一个undefined
值