【问题标题】:Why does console.log say undefined, and then the correct value? [duplicate]为什么console.log 说未定义,然后是正确的值? [复制]
【发布时间】:2014-08-12 03:00:23
【问题描述】:
console.log("hi") gives 
undefined
hi

console.log(1+1) gives 
undefined
2

无论是字符串还是整数计算,我都得到 undefined 然后是正确答案。

为什么我会收到未定义的消息?有什么好办法避免吗?

【问题讨论】:

  • 我个人只在 chrome 上注意到它
  • 现在在 Firefox 上看到它。
  • Chrome 控制台显示undefined 秒。
  • 我认为它返回了console.log(...)的值。
  • 我的问题是骗人的 - 我更新了另一个问题以包括 firefox!

标签: javascript console.log


【解决方案1】:

控制台将打印计算表达式的结果。评估console.log() 的结果是undefined,因为console.log 没有明确返回一些东西。它有打印到控制台的副作用。

您可以通过许多表达式观察相同的行为:

> var x = 1;
undefined;

变量声明不会产生值,因此undefined 会再次打印到控制台。

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

> 2 + 2;
4

【讨论】:

  • 这就像在实际控制台之外调用console.log(console.log('Hi'))
  • 如果您想查看刚刚分配的变量的值,可以键入;,后跟变量名:var pi = Math.PI; pi
【解决方案2】:

undefinedconsole.log() 的返回值。这是 Chrome 的 JS 控制台的标准行为

【讨论】:

  • console.log() 可能因为您没有传入任何内容,但传入的参数肯定不应该返回未定义的?
  • 在 JS 中一切都是函数。如果将其用作方法,仍然会得到undefined
  • @Pogrindis - 试试(function(){console.log('hi'); return 1})()
【解决方案3】:

控制台显示输入的返回值。 console.log() 不返回任何内容,因此未定义。

您可以直接在控制台中输入以获取结果。

【讨论】:

  • chrome devtools 是这样的
【解决方案4】:

这是因为console.log() 不返回值(即返回未定义)。您输入到控制台的任何结果首先打印到控制台,然后稍后来自console.log 的消息到达控制台并被打印。

如果浏览器没有显示未定义,这意味着它已经注意到您的控制台输入只打印到控制台,因此跳过显示结果。

【讨论】:

    【解决方案5】:

    它返回console.log(...) 的值。

    像这样定义两个函数,你就会明白为什么了。

    function functionA() {
      return 1; 
    }
    function functionB() {
      return;
    }
    

    functionB() 返回未定义。

    【讨论】:

      猜你喜欢
      • 2020-01-26
      • 2015-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-24
      相关资源
      最近更新 更多