Chrome / Firefox console.log始终在行后附加“ undefined”


77

每次console.log执行时,都会undefined在输出日志中附加一行提示。

在Windows和Linux上的Firefox和Chrome中都会发生这种情况。


5
那你的问题是什么?您可以显示一些产生这种情况的示例代码吗?您期望的行为是什么?
卡帕

那可能是没有足够的信息来解决您的问题
Titouan de Bailleul 2013年

1
尽管确实缺少一些信息,但我还是给了我最好的镜头:)
talkol

2
console.log()返回undefined
火箭Hazmat

我的问题是我只显示错误警告,显示对我有用的消息信息
狮子座

Answers:


97

如果您是console.log()从JS文件运行的,则undefined不应添加此行。

如果您是console.log()从控制台本身运行的,那么这很有意义。这是为什么:在控制台中,您可以键入变量的名称(例如,尝试键入window),并打印有关该变量的信息。从控制台运行任何void函数(例如console.log)时,undefined在这种情况下,它还会打印出有关返回值的信息。

我在Chrome(Mac ver 23.0.1271.101)上测试了这两种情况,的确undefined在控制台中运行该行时确实看到了。这undefined时候我写在控制台此行也出现:var bla = "sdfdfs"


感谢您的答复。我正在从控制台本身运行它,我尝试停止所有扩展,但得到的结果相同。
N. Chamaa

3
好吧,这是预期的行为。一切都按预期进行。您可以启用扩展:)只需从JS文件运行console.log,您将不会看到此信息。为什么仍然要从控制台运行console.log?您可以键入任何不带console.log的变量名称
talkol 2013年

但这不是以前,这就是为什么!
N. Chamaa

也许你的浏览器进行了更新和这种行为在新版本中开始。由于同样的事情发生在我的Chrome(在Mac上),我很怀疑这是一个问题..
talkol

39

尽管talkol的答案还可以,但我还是尝试直截了当:

JavaScript被设计为动态语言,这意味着未预定义函数返回值的类型(字符串,无效值,布尔值…)。如果函数不使用return语句或没有值的空return语句,则JavaScript自动返回undefined。这意味着在JavaScript中,每个函数至少返回未定义的内容。

因此console.log(),Chrome控制台中的函数使用no或为空的return语句,因此该函数的返回值是不确定的。此函数的返回值也会显示在Chrome控制台中。

[如果有人知道console.log()在Google Chrome浏览器源代码中可以找到该函数的定义的位置,请用链接发表评论,然后我们甚至可以进一步研究真实的代码,将是不错的选择。]

资料来源:


引用其他帖子很好,但这不是完整的答案,因此更适合作为对所引用答案的评论。
2014年

5
我尝试这样做,但是由于缺乏足够的声誉而无法发表评论(“您必须拥有50条声誉才能发表评论”),所以我认为使用“非最佳”回答方式而不是评论会更好,然后发布。
Paul Vincent Beigang 2014年

这还算公平。不过,除非您编辑帖子,否则我无法删除我的不赞成投票。介意答案中该链接的内容是什么?如果您能做到,那么我可以更改我的投票权:)
2014年


5

浏览器中的控制台环境旨在采用程序中的最后一个语句表达式,并对其求值,然后向您显示该值。

赋值表达式的结果是所赋的值。因此,JavaScript引擎只是进行分配,而控制台又执行了一个额外的步骤,即设置我的最后一条语句,然后将其返回给您。这就是为什么它打印2:

这里。

在没有返回值的语句中,您会得到未定义的信息。


也许有点题外话,但为什么a=2返回2而var b=2什么也不返回呢?(我猜是因为=是一个操作符返回一个值,但为什么没有做的声明语句一样?)
floatingpurr

1

您可以做的就是简单地创建自己的console.log之类的函数,并在开发人员控制台中进行大量编码时返回以更改此行为。这是开发人员控制台中的示例:

console.log('I hate seeing the next line stating the obvious.')
I hate seeing the next line stating the obvious.
undefined
log = function(l){return l}
function log()
if(1 === 2){console.log('1 is not equal to 2.')}else{log('No Shit Sherlock.')}
"No Shit Sherlock."

0

undefined是Chrome开发者工具中console.log()的返回值。如果您在Chrome开发人员工具中执行以下操作,则会得到未定义的结果,即使x的值为3,也会看到未定义的结果。

> let x = 3
> undefined

-3

如果您习惯于console.log在一行中发出多个值,这是一个很棘手的选择:

var1 + ' ' + var2 + ' ' + var...

(更好的主意欢迎,在某些情况下可能会爆炸)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.