Node console.log/util.inspect для вложенного объекта/массива

Для вложенного объекта или массива

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

console.log или util.debug + util.inspect

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

Под определенной глубиной он показывает только [Object] без дальнейших подробностей.

Это всегда раздражает отладку, поскольку я не могу исследовать фактическое значение.

Почему node (или V8) реализует это? и есть ли какая-нибудь работа?

Спасибо.


EDIT: Я получил предложение

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

Результат

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

Это вроде работает, но, очевидно, целое stringify ed, и, вероятно, я не мог сделать это для вывода всех объектов при отладке. Не общий метод.


EDIT2:

решение:

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

выход:

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

круто. Это то, что я хочу!

Ответ 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' } } } } } }

Ответ 2

Используйте JSON.stringify:

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

Результат:

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