Node.js - console.log不显示数组中的项目,而是显示[Object]

5
我有一个问题,无法注销对象中数组的内容。实际对象看起来像这样:
   var stuff = { accepted: [ 'item1', 'item2' ],
         rejected: [],
         response: 'Foo',
         envelope: { from: 'The sender', to: ['new item1', 'new item2'] },
         messageId: 'xxxxxxxxxxxxx' } }

"console.log 显示了第一个数组的项目,但第二个数组被输出为 [Object]。"
 { accepted: [ 'item1', 'item2' ],
             rejected: [],
             response: 'Foo',
             envelope: { from: 'The sender', to: [Object] },
             messageId: 'xxxxxxxxxxxxx' } } 

这里发生了什么事情,我如何在console.log时显示第二个数组的项目。谢谢任何帮助!
更新:
抱歉,我忘记添加我只在Node.js中工作,因此需要在服务器端日志中显示完全按照回调接收到的对象,使用直接的console.log,即不需要进一步的字符串化。
我还尝试创建另一个具有类似结构的随机对象,就像这样。
 var objText = {
      fun: {
        stuff: 'Some stuff',
        list: ['this', 'it', 'takes']
      }
    };

上述的 console.log 为:
{ fun: { stuff: 'Some stuff', list: [ 'this', 'it', 'takes' ] } }

这对我来说看起来是相同的结构,但是console.log可以正常工作,因此在Node中记录嵌入在对象内部的数组内容甚至在外部对象内部的对象中似乎是完全可能的。

你使用的是哪个浏览器/环境?在Safari 10.1.1中,它显示正常。 - Samie Bencherif
例如,Node.js以这种方式记录它 - Daniel Pérez
4个回答

8

看起来这是一个旧话题了,不管怎样

我遇到了同样的问题,嵌套数组被打印为[Array]

这是因为Node.js中的console.log使用util.inspect进行打印,默认深度为2。 因此,要打印深度大于2的内容,可以使用以下方法:

const util = require('util')
console.log(util.inspect(errors, true, 10))

1
这应该是被接受的答案:1. console.log确实使用了深度为2的util.inspect(因此出现了OP的问题),2. 使用建议的解决方案确实可以解决问题。此外,如果您向util.inspect添加最后一个参数并传递trueconsole.log将像以前一样运行(例如,也会显示颜色)。深度(这里是10)可以相应地进行调整。 - Justin Case

7

这是某些浏览器和实现显示复杂或深度对象/数组的默认方式,使用console.log。另一种选择是使用JSON.stringify和console.log:

var stuff = {
  accepted: ['item1', 'item2'],
  rejected: [],
  response: 'Foo',
  envelope: {
    from: 'The sender',
    to: ['new item1', 'new item2']
  },
  messageId: 'xxxxxxxxxxxxx'
}


console.log(JSON.stringify(stuff, null, 4));

编辑:

另一种选择是使用console.dir,如果您有一个过于复杂或递归的对象,请参见https://dev59.com/R2gv5IYBdhLWcg3wQ-qd#27534731


4
尝试使用:console.log(JSON.stringify(variable))进行操作。

0
如果你喜欢Chrome开发工具,可以折叠你的JSON对象并观察很多东西,你可以使用--inspect标志:
node --inspect index.js

控制台将会给你一个URL,你只需要复制粘贴到Google Chrome中就可以享受Google Chrome控制台了。

更多信息请点击此链接


谢谢您的建议,但我目前使用的是Node 0.12版本,无法升级。 - mikeym

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接