为什么控制台中的变量声明会返回“未定义”?

时间:2011-06-09 18:13:14

标签: firebug

我使用的是最新的Firefox(4.0.1)和Firebug(1.7.2)。

每当我在控制台中输入变量声明时,都会返回斜体“未定义”警告。

例如,如果我输入“var x = 5;”然后响应是“未定义”,而不是“5”。

如果我在控制台中输入“x”,则返回正确的值5。然而,错误/警告有点令人讨厌,我真的想知道原因和解决方案,如果我是唯一一个经历过这种情况的人。

有趣的是,如果我不使用“var”但只是使用“x = 5”声明该值,则表示正确的行为,并在控制台中返回“5”。

3 个答案:

答案 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如何评估赋值。