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