有时候我们会看到一些代码,如:
var why = void 0
很多人就会想,不就是把变量赋值成一个 undefined?我直接赋值 undefined 不行吗?直接赋值 undefined 不是语义化更好吗?写 void 来故作高深吗?
但其实,在 JavaScript 中,undefined 它其实不是一个关键字,而是一个 window 上的属性!我们只需要获取一下它的属性描述符就知道了
Object.getOwnPropertyDescriptor(window,undefined)
// 输出
{ value: undefined, writable: false, enumerable: false, configurable: false }
我们可以看到它的确是 window 上的一个属性,而且是不可改写的,但是我们要注意,在低版本的游览器是可以被改写的,比如 ie8。
还有可能在函数里面可能会出问题:
function assignment() {
let undefined = 666
let a = undefined;
console.log(a) // 输出 666
}
在上述代码中,我们可以明显看到变量 a 本来是想定义为 undefined,结果赋值变为了 666 !
当然,在实际开发中,百分之 99 的人应该都不会用 undefined 命名,也极少项目需要兼容 ie8,用 void 代替 undefined 只是一种规范罢了,如果上诉问题能保证都不会出现,那么使用 undefined 直接赋值也是可以的!