因此,在Chrome JS控制台中进行实验时,我发现了一些令人费解的事情。
当我在控制台中运行以下内容时,控制台会打印Display.getInstance().exitApplication()
undefined
但是,当我运行它时,会打印var i = 10;
:
10
以下是我的控制台中结果的屏幕截图。
有人可以向我解释为什么会出现这种行为上的差异吗?
答案 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)
答案 4 :(得分:0)
声明不返回值,因此var i = 10返回undefined 另一方面,j = 10,是一个赋值,它返回一个值,因此控制台返回该值。