我使用的是最新的Firefox(4.0.1)和Firebug(1.7.2)。
每当我在控制台中输入变量声明时,都会返回斜体“未定义”警告。
例如,如果我输入“var x = 5;”然后响应是“未定义”,而不是“5”。
如果我在控制台中输入“x”,则返回正确的值5。然而,错误/警告有点令人讨厌,我真的想知道原因和解决方案,如果我是唯一一个经历过这种情况的人。
有趣的是,如果我不使用“var”但只是使用“x = 5”声明该值,则表示正确的行为,并在控制台中返回“5”。
答案 0 :(得分:4)
(这只是猜测,我不是Javascript语言规则或Firebug的详细专家。)
控制台提供的反馈是评估您输入的行的结果。我假设声明 var x = ...
是一个没有值的语句,而简单的赋值(x = ...
)是符合C遗产和“一切都是表达“功能语言的态度,一种评估指定值的表达式。
答案 1 :(得分:0)
Firebug正在报告评估表达式的结果,相当于:
typeof eval(“var x = 5;”);
“未定义”
typeof eval(“x = 5;”);
“数量”
答案 2 :(得分:0)
与其他语言不同,在JavaScript中,每段代码都是表达式或语句。 表达式总是返回一个值。语句始终返回未定义。 original JavaScript specification from 1997.
中定义了什么是语句和什么是表达式例如,说这是我们的程序:
var color = "blue";
color = "red";
您会注意到,如果在控制台中逐行输入此内容,则第一行返回未定义,而第二行返回“红色”。
这是因为,正如您可能已经猜到的那样,变量声明(var something = something
)是一个语句,而变量赋值(something = something
)是一个表达式。
如果您感到好奇,请尝试阅读上面我链接的规范中“简单分配”部分下的11.13.1(第50页)中的JavaScript如何评估赋值。