我正在用这个恶意的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。
所以我的问题是,第一个代码片段is...since中的x包含undefined (因为它没有初始化),为什么alert没有执行?奇怪的是,当显式声明x为undefined (x = undefined)时,alert执行...
发布于 2010-03-29 03:55:49
名为undefined的变量和名为undefined的值之间存在差异。
var undefined = true,
x;在本例中,变量undefined被设置为值true,而x被设置为值undefined (而不是变量!)。
var undefined = true,
x = undefined;在本例中,变量undefined也被设置为值true,而x被设置为变量undefined中包含的值(即true)。
因此,虽然可以声明一个名为undefined的变量,但不能更改将未初始化的变量设置为值undefined的事实。
发布于 2010-03-29 03:55:18
仅仅声明一个名为"undefined“的变量并不意味着你覆盖了原生”未定义“值的内置概念。
想象一下,如果Java允许您使用"null“作为标识符。好吧,我猜Java不像Javascript那样具有强制性。不管怎样,Javascript语句
if (x) alert("foo");将"x“的值隐式强制转换为布尔值。该值未定义,因此它强制为"boolean“会导致false。
发布于 2010-03-29 03:57:29
未初始化的变量将获得特殊值undefined。当您将一个变量赋给另一个变量时,您为它提供了一个字符串,该字符串引用了您在当前作用域中定义的变量。在本例中,您定义了一个名为undefined的变量,因此JavaScript引擎将首先查看这些变量,可以看到您已经命名了一个undefined,然后将该变量赋值给它。
https://stackoverflow.com/questions/2534260
复制相似问题