为什么在检查之前用"var undefined;"声明未定义?

Jam*_*ner 0 javascript undefined

我正在看这个问题:检查一个对象是否被定义:最佳实践并注意到我之前没有见过的答案:

function isDefined(x) {
    var undefined;
    return x !== undefined;
}
Run Code Online (Sandbox Code Playgroud)

声明undefined并保留未定义的原因是什么- 换句话说定义undefinedundefined

use*_*674 11

有些人确信undefined直接使用是不好的,因为有人可以做到window.undefined = "whatever".这是因为,在ES5之前(我们稍后将看到会发生什么),undefined不是保留字,可以作为一个标识符.

本地var防止这样一个糟糕的全局变量中毒 - 它引入了一个名为"undefined"的局部变量(它将遮蔽可能存在的任何坏变量),由于没有赋值,它的值默认为实际的未定义值.

如果我如此关注(我不是),我会这样做x !== (void 0).不像undefined,void运营商一直保留字,所以它不受上述中毒.