我正在尝试使用这种恶意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
没有执行?奇怪的是,当明确说明x
为undefined
(x = undefined
)时,alert
已执行......
答案 0 :(得分:17)
名为undefined
的变量与名为undefined
的值之间存在差异。
var undefined = true,
x;
在此示例中,变量undefined
设置为值true
,x
设置为值(不是变量!)undefined
。
var undefined = true,
x = undefined;
在此示例中,变量undefined
也设置为值true
,x
设置为变量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
,然后为其分配该变量。