为什么变量初始化和为现有变量赋值会在Javascript控制台中产生不同的结果?

时间:2018-01-04 05:00:49

标签: javascript

因此,在Chrome JS控制台中进行实验时,我发现了一些令人费解的事情。

当我在控制台中运行以下内容时,控制台会打印Display.getInstance().exitApplication()

undefined

但是,当我运行它时,会打印var i = 10;

10

以下是我的控制台中结果的屏幕截图。

Sample

有人可以向我解释为什么会出现这种行为上的差异吗?

5 个答案:

答案 0 :(得分:2)

这是陈述和表达之间的根本区别。表达式评估的东西,陈述没有。

var j = 10;是一个语句(具体为variable statement),因此它不会评估任何内容,只能在语句上下文中使用。

j = 10是一个表达式,因此它计算为一个值,并且可以包含在预期值的任何位置(EG。if ( j = 10 )console.log( j = 10 ))。任何表达式也可以在语句上下文中单独使用,因为有一种称为expression statement的语句。

在REPL(读取,评估,打印,循环)(例如Chrome的控制台)中,表达式语句的结果在评估后立即打印,其他语句(如变量语句)不会评估为任何内容REPL无法打印任何内容,或者在Chrome的情况下,打印undefined

答案 1 :(得分:1)

控制台将打印评估表达式的结果。评估var i = 10的结果为undefined,因为var未明确返回某些内容。

您可以使用许多表达式观察到相同的行为:

> console.loe(10);
10
undefined;

赋值表达式不会生成值,因此再次将undefined打印到控制台。

作为一个反例,包含数学运算符的表达式确实产生一个打印到控制台而不是undefined的值:

> j = 10;
10

答案 2 :(得分:1)

Chrome会打印您输入的代码的返回值。这意味着它打印的内容相当于console.log(WHAT_YOU_ENTER);。正如@elclanrs(upvoted)评论的那样,表达式j = 10和声明var i = 10之间存在差异。

答案 3 :(得分:1)

var i = 10只是一个陈述。 它为变量i赋值。 它只是声明。它不返回值。 当你打印它时它会给你一个答案10。

enter image description here

如果你写k = 10,它就像一个表达式。它将分配并返回值。

答案 4 :(得分:0)

声明不返回值,因此var i = 10返回undefined 另一方面,j = 10,是一个赋值,它返回一个值,因此控制台返回该值。