var undefined = true;

And*_*ech 7 javascript

我正在尝试使用这种恶意JavaScript行: var undefined = true;

JavaScript中的每个未初始化的变量的值undefined都只是一个保存特殊值的变量'undefined',因此以下内容应该执行alert:

var undefined = true, 
    x;

if (x) {
    alert('ok');
}
Run Code Online (Sandbox Code Playgroud)

但事实并非如此,我的问题是为什么?

在进一步的实验中,我尝试了以下方法:

var undefined = true, 
    x = undefined;

if (x) {
    alert('ok');
}
Run Code Online (Sandbox Code Playgroud)

这一次,alert执行.

所以我的问题是...因为在第一个片段x持有undefined(因为它未初始化),为什么没有alert执行?奇怪的是,当明确说明xundefined(x = undefined)时,alert执行...

dtb*_*dtb 17

名为变量undefined和调用的值之间存在差异undefined.

var undefined = true, 
    x;
Run Code Online (Sandbox Code Playgroud)

在此示例中,变量undefined设置为值true,并x设置为值(不是变量!)undefined.

var undefined = true, 
    x = undefined;
Run Code Online (Sandbox Code Playgroud)

在此示例中,变量undefined也设置为该值true,并x设置为变量中包含的值undefined(即true).

因此,虽然您可以声明一个名为的变量undefined,但您无法更改非初始化变量设置为该值的事实undefined.

  • @Pindatjuh:就像变量有任何其他名称一样.名为`undefined`的变量没有什么特别之处. (3认同)