【问题标题】:Javascript console.log(object) vs. concatenating stringJavascript console.log(object) 与连接字符串
【发布时间】:2013-01-13 20:52:42
【问题描述】:

我在 node.js 中运行它:

> x = { 'foo' : 'bar' }
{ foo: 'bar' }
> console.log(x)
{ foo: 'bar' }
undefined
> console.log("hmm: " + x)
hmm: [object Object]
undefined

我不明白为什么console.log(x) "pretty-prints" 对象,而字符串连接"ugly-prints" 它。更重要的是,打印hmm: { foo: 'bar' } 的最佳方法是什么?

【问题讨论】:

    标签: javascript node.js string-concatenation pretty-print


    【解决方案1】:

    您可以使用console.log(JSON.stringify(yourObject)); 打印您的对象。它工作!

    【讨论】:

      【解决方案2】:

      console.log 函数

      'console.log' 是一个重载函数,它接受通过副本(字符串|数字|布尔值)或通过引用(其他所有内容)传递的参数列表。

      对于通过复制传递的值,通过将其转换为字符串来打印该值。
      对于通过引用传递的值,该值会按照浏览器认为合适的方式打印出来。

      + 运算符

      加号运算符 (+) 被重载。 当运算符两边都是数字时,返回两个运算符之和。

      如果运算符的任一侧是字符串,则将两边都转换为字符串,并返回这两个字符串的连接。

      console.log("hmm: " + x);
      

      和写一样

      console.log(String("hmm: ") + String(x));
      

      解决方案

      通过将加号 (+) 与逗号 (,) 交换来防止隐式字符串转换

      console.log("hmm: ", x);
      

      更多信息

      有关“console.log”功能的更深入描述,请参阅:
      https://developer.mozilla.org/en-US/docs/DOM/console.log

      有关加号运算符 (+) 的更深入描述,请参阅:
      http://www.w3schools.com/js/js_operators.asp

      【讨论】:

      【解决方案3】:

      您有多种选择:

      process.stdout.write('hmm: ')
      console.dir(x)
      

      另一个...

      var util = require('util')
      process.stdout.write('hmm: ')
      console.log(util.inspect(x, true, 10, true))
      

      有关详细信息,请参阅 util.inspect 文档。

      编辑:抱歉,我以为我读过 Node.js。这仅对 Node.js 有效。所以,我会把它留给任何 Google 员工。

      Edit2:我没疯,我只是需要睡觉。你确实写过 Node.js。我要把它添加为标签。

      【讨论】:

        【解决方案4】:

        打印附加字符串的对象时使用JSON.stringify

        console.log("Haa"+JSON.stringify(x))
        

        【讨论】:

          【解决方案5】:

          + x 将对象x 强制转换为字符串,即[object Object]

          http://jsfiddle.net/Ze32g/

          漂亮的打印是一个非常漂亮且可能非常复杂的底层代码,有人将其作为console 对象和log 方法的一部分实现。

          试试这个:

          console.log("hmm: ", x);
          

          【讨论】:

          • 我喜欢这个。这让我想知道为什么更多示例不使用log(x, y) 形式而不是log(x + y)
          • @JohnZwinck 我不认为可变参数版本得到广泛支持(至少 Chrome 和显然 node.js 支持它,但其他人可能不支持)
          • console.log("Hi %s! Have a nice day!", "John"); // Hi John! Have a nice day!
          猜你喜欢
          • 2012-06-06
          • 1970-01-01
          • 2010-11-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-27
          • 2015-01-13
          • 2023-03-14
          相关资源
          最近更新 更多