var undefined = true;

时间:2010-03-28 19:47:19

标签: javascript

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

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

var undefined = true, 
    x;

if (x) {
    alert('ok');
}

但它没有,我的问题是为什么?

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

var undefined = true, 
    x = undefined;

if (x) {
    alert('ok');
}

这次,alert被执行。

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

3 个答案:

答案 0 :(得分:17)

名为undefined的变量与名为undefined的值之间存在差异。

var undefined = true, 
    x;

在此示例中,变量undefined设置为值truex设置为值(不是变量!)undefined

var undefined = true, 
    x = undefined;

在此示例中,变量undefined也设置为值truex设置为变量undefined中包含的值(即true)。

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

答案 1 :(得分:1)

声明一个名为“undefined”的变量并不意味着你要覆盖原生“未定义”值的内置概念。

想象一下,如果Java允许你使用“null”作为标识符。好吧,我猜Java与Javascript没有相同的强制。无论如何Javascript声明

if (x) alert("foo");

涉及将“x”的值隐式强制转换为布尔值。该值未定义,因此其强制为“boolean”会导致false

答案 2 :(得分:0)

未初始化的变量获得特殊值undefined。当您将变量分配给另一个变量时,您将为其提供一个字符串,该字符串引用您在当前范围内定义的变量。在这种情况下,您已经定义了一个名为undefined的变量,因此JavaScript引擎将首先查看变量,看看您是否命名了一个undefined,然后为其分配该变量。