【问题标题】:node console.log / util.inspect for nested Object / Array节点 console.log / util.inspect 用于嵌套对象 / 数组
【发布时间】:2014-02-03 10:09:07
【问题描述】:

对于嵌套对象或数组

var obj = {
  foo:
  {
    foo:
    {
      foo:
      {
        foo:
        {
          foo:
          {
            foo: 'foo'
          }
        }
      }
    }
  }
};
console.log(obj);
util.debug(obj);
util.debug(util.inspect(obj));

console.logutil.debug + util.inspect

{ foo: { foo: { foo: [Object] } } }
DEBUG: [object Object]
DEBUG: { foo: { foo: { foo: [Object] } } }

在一定深度下,它只显示[Object],没有更多细节。

这在调试时总是很烦人,因为我无法调查实际值。

为什么node(或V8)会这样实现?有什么解决方法吗?

谢谢。


编辑: 我收到了一个建议

console.log(JSON.stringify(obj));

结果

{"foo":{"foo":{"foo":{"foo":{"foo":{"foo":"foo"}}}}}}

它有点工作,但显然整个是stringifyed,可能我无法对调试时的所有对象输出执行此操作。不是通用方法。


EDIT2:

解决方案:

console.log(util.inspect(obj,{ depth: null }));

输出:

{ foo: { foo: { foo: { foo: { foo: { foo: 'foo' } } } } } }

酷。这就是我想要的!

【问题讨论】:

  • 你试过 console.log(JSON.stringify(obj)) 吗?
  • 谢谢,我编辑了我的问题。请检查一下。

标签: javascript node.js


【解决方案1】:

util.inspect() 接受第二个options 参数,您可以在其中指定depth。默认值为 2。

http://nodejs.org/api/util.html#util_util_inspect_object_options

所以:

util = require('util');
var obj = { foo: { foo: { foo: { foo: { foo: { foo: 'foo' } } } } } };
console.log(util.inspect(obj, {depth:12}));

...产量:

{ foo: { foo: { foo: { foo: { foo: { foo: 'foo' } } } } } }

【讨论】:

  • 酷。非常感谢你。你的答案被检查了!我会设置depth null。我编辑了我的 Q。
  • 小心depth:null,因为很多时候数据结构都是循环的,你最终会陷入死循环。但是,如果您打印自己创建的内容,请继续 :-)
  • 好建议。再次感谢!
  • 默认深度为2。
  • 没错,我的错。我用 8 将它包装在我的项目中。修正了我的答案。
【解决方案2】:

使用JSON.stringify:

var obj = {
  foo:
  {
    foo:
    {
      foo:
      {
        foo:
        {
          foo:
          {
            foo: 'foo'
          }
        }
      }
    }
  }
};
console.log(JSON.stringify(obj));

结果:

{"foo":{"foo":{"foo":{"foo":{"foo":{"foo":"foo"}}}}}}

【讨论】:

    猜你喜欢
    • 2015-07-06
    • 2022-06-13
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    • 1970-01-01
    • 2023-01-31
    • 1970-01-01
    相关资源
    最近更新 更多