JS 为什么不能直接赋值 undefined ?

986 阅读1分钟

有时候我们会看到一些代码,如:

    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 直接赋值也是可以的!