86

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

它发生在 Windows 和 Linux 上的 Firefox 和 Chrome 中。

4

7 回答 7

108

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

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

undefined我在我的 Chrome(Mac 版本 23.0.1271.101)上测试了这两种情况,当我在控制台中运行它时,我确实看到了这条线。当我在控制台中写下这一undefined行时,也会出现这种情况:var bla = "sdfdfs"

于 2013-01-31T19:57:01.773 回答
43

虽然talkol的回答还可以,但我试着更直截了当地说:

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

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

[如果有人知道在哪里可以找到console.log()谷歌浏览器源代码中的函数定义,请在链接中发表评论,然后我们甚至可以进一步查看真实代码,会很好。]

资料来源:

于 2014-02-11T20:19:26.277 回答
16

按照图片解决这个问题:

Ctrl + Shift + J

于 2018-03-30T16:10:22.110 回答
8

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

赋值表达式的结果是被赋值的值。所以 JavaScript 引擎只是做了一个赋值,但控制台做了一个额外的步骤,即设置我的最后一个语句,把那个值返回给你。这就是它打印 2 的原因:

这里。

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

于 2018-10-20T05:40:50.823 回答
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."
于 2018-06-11T19:13:22.613 回答
1

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

> let x = 3
> undefined
于 2020-04-11T00:29:18.763 回答
-3

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

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

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

于 2016-03-29T03:14:35.597 回答