node console.log / util.inspect用于嵌套的Object / Array

时间:2014-02-03 10:09:08

标签: javascript node.js

对于嵌套的Object或Array

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"}}}}}}

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


EDIT2:

溶液:

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

输出:

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

冷却。这就是我想要的!

2 个答案:

答案 0 :(得分:14)

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' } } } } } }

答案 1 :(得分:2)

使用JSON.stringify

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

结果:

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