Chrome/Firefox console.log 总是附加一行“未定义”

问题描述 投票:0回答:10

每次执行

console.log
时,都会在输出日志中附加一行
undefined

Windows 和 Linux 上的 Firefox 和 Chrome 都会出现这种情况。

javascript debugging logging console
10个回答
119
投票

如果您从 JS 文件运行

console.log()
,则不应附加此
undefined
行。

如果您从控制台本身运行

console.log()
,那就有意义了。这就是原因:在控制台中,您可以键入变量的名称(例如尝试键入
window
),它会打印有关该变量的信息。当您从控制台运行任何 void 函数(如 console.log)时,它还会打印有关返回值的信息,在本例中为
undefined

我在 Chrome(Mac 版本 23.0.1271.101)上测试了这两种情况,当我在控制台内运行它时,我确实看到了

undefined
行。当我在控制台中写下这一行时,也会出现这个
undefined
var bla = "sdfdfs"


44
投票

虽然talkol的回答还可以,但我试着说得更直白:

JavaScript 被设计为动态语言,这意味着函数返回值的类型(字符串、void、布尔值……)不是预先定义的。如果函数不使用 return 语句或没有值的空 return 语句,JavaScript 会自动返回 undefined。这意味着在 JavaScript 中每个函数都会返回一些东西,至少是未定义的。

因此Chrome控制台中的函数

console.log()
要么不使用返回语句,要么使用空返回语句,因此该函数的返回值是未定义的。该函数的返回值也会显示在 Chrome 控制台中。

[如果有人知道在 Google Chrome 源代码中哪里可以找到

console.log()
函数的定义,请用链接进行评论,然后我们甚至可以进一步查看真正的代码,那就太好了。]

来源:


16
投票

按照图片解决这个问题:

Ctrl + Shift + J


8
投票

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

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

here.

在没有返回值的语句中,你会得到类似 undefined 的信息。


2
投票

您在控制台中看到的

undefined
是函数的返回值: 查看这两个变体:

这个没有返回任何内容


这个返回一些东西:


1
投票

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

> let x = 3
> undefined

1
投票

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

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."

1
投票

记住一件事。任何有定义的函数总是会返回一些东西,如果你跳过 return 关键字,当你调用它时它最终会返回 undefined。


0
投票

在下拉部分中,单击

Info
查看日志。


-5
投票

如果您使用

console.log
在一行中发出多个值,这里有一个 hacky 替代方案:

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

(欢迎更好的想法,在某些情况下这可能会失败)

© www.soinside.com 2019 - 2024. All rights reserved.