Как я могу получить полный объект в узел.JS консоли по.log(), а не'[Object]'?
при отладке с помощью console.log()
, Как я могу получить полный объект?
const myObject = {
"a":"a",
"b":{
"c":"c",
"d":{
"e":"e",
"f":{
"g":"g",
"h":{
"i":"i"
}
}
}
}
};
console.log(myObject);
выходы:
{ a: 'a', b: { c: 'c', d: { e: 'e', f: [Object] } } }
но я хочу также увидеть содержание собственности f
.
14 ответов
вам нужно использовать util.inspect()
:
const util = require('util')
console.log(util.inspect(myObject, {showHidden: false, depth: null}))
// alternative shortcut
console.log(util.inspect(myObject, false, null, true /* enable colors */))
выходы
{ a: 'a', b: { c: 'c', d: { e: 'e', f: { g: 'g', h: { i: 'i' } } } } }
посмотреть util.inspect()
docs.
можно использовать JSON.stringify
, и получить хороший отступ, а также, возможно, легче запомнить синтаксис.
console.log(JSON.stringify(myObject, null, 4));
{
"a": "a",
"b": {
"c": "c",
"d": {
"e": "e",
"f": {
"g": "g",
"h": {
"i": "i"
}
}
}
}
}
третий аргумент задает уровень отступа, поэтому вы можете настроить его по желанию.
подробнее здесь при необходимости:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
Компиляция многих полезных ответов из (по крайней мере) узла.js v0.10.33
(стабильный) / v0.11.14
(неустойчиво) предположительно через (По крайней мере) v7.7.4
(текущая версия по состоянию на последнее обновление этого ответа).
tl; dr
util.inspect()
находится в основе диагностического вывода:console.log()
и console.dir()
а также узел.в JS функция REPL использовать util.inspect()
имплицитно, так что это вообще не нужно require('util')
и звоните util.inspect()
напрямую.
чтобы получить желаемый результат для примера в вопросе:
console.dir(myObject, { depth: null }); // `depth: null` ensures unlimited recursion
детали ниже.
-
console.log()
(и его псевдоним,console.info()
):-
если 1-й аргумент не является строкой формата:
util.inspect()
автоматически применяется к каждому аргументу:o = { one: 1, two: 'deux', foo: function(){} }; console.log(o, [1,2,3]) // -> '{ one: 1, two: 'deux', foo: [Function] } [ 1, 2, 3 ]'
- обратите внимание, что вы не может пройти опции через
util.inspect()
в этом случае, что подразумевает 2 заметных ограничения:- структурная глубина на выходе ограничен 2 уровень (по умолчанию).
- так как вы не можете изменить это с
console.log()
, вы должны вместо этого использоватьconsole.dir()
:console.dir(myObject, { depth: null }
печать с неограниченный глубина; см. ниже.
- так как вы не можете изменить это с
- вы не можете включить подсветку синтаксиса на.
- структурная глубина на выходе ограничен 2 уровень (по умолчанию).
-
если 1-й аргумент является строкой формата (см. ниже): использует
util.format()
для печати оставшихся аргументов на основе строки формата (см. ниже); например:o = { one: 1, two: 'deux', foo: function(){} }; console.log('o as JSON: %j', o) // -> 'o as JSON: {"one":1,"two":"deux"}'
- Примечание.:
- нет заполнителя для представления объекты
util.inspect()
-стиле. - JSON генерируется с помощью
%j
не красиво отпечатано.
- нет заполнителя для представления объекты
-
если 1-й аргумент не является строкой формата:
-
console.dir()
:-
можно только 1 аргумент для проверки, и всегда применяет
util.inspect()
- по сути, оболочкой дляutil.inspect()
без опций по умолчанию; например:o = { one: 1, two: 'deux', foo: function(){} }; console.dir(o); // Effectively the same as console.log(o) in this case.
-
узел.с JS версии v0.11.14+: необязательный 2-й аргумент задает параметры для
util.inspect()
- см. ниже; например,:console.dir({ one: 1, two: 'deux'}, { colors: true }); // node 0.11+: Prints object representation with syntax coloring.
-
можно только 1 аргумент для проверки, и всегда применяет
-
функцию REPL: неявно печатает возвращаемое значение любого выражения с помощью
util.inspect()
С синтаксис раскраски;
т. е. просто введите имя переменной и нажмите Enter, чтобы напечатать проверенную версию ее значения; например.:o = { one: 1, two: 'deux', foo: function(){} } // echoes the object definition with syntax coloring.
util.inspect()
автоматически (и неизменно) pretty-prints объект и массив представления, но производит многострочный выход только при необходимости - если все помещается на одной строке, печатается только 1 строка.
по умолчанию вывод обернут около 60 символов спасибо, Shrey , независимо от того, отправляется ли вывод в файл или терминал. На практике, так как разрывы происходят только на границах собственность, вы часто будете иметь более короткие строки, но они также могут быть длиннее (например, с длинными значениями свойств).
в V6.3.0+ вы можете использовать
breakLength
возможность переопределить 60-символьный предел; если вы установите его вInfinity
, все выводится на один линия.
если вы хотите больше контроля над pretty-printing, рассмотрите возможность использования JSON.stringify()
С 3-й аргумент, но обратите внимание на следующее:
-
не с объектами, которые имеют циклические ссылки, например
module
в глобальном контексте. - методы (функции) по дизайну не будут включены.
- вы не можете выбрать отображение скрытых (не перечисляемых) свойства.
- пример вызова:
JSON.stringify({ one: 1, two: 'deux', three: true}, undefined, 2); // creates a pretty-printed multiline JSON representation indented with 2 spaces
util.inspect()
параметры объекта (2-й аргумент):
источник:http://nodejs.org/api/util.html#util_util_format_format
дополнительно опции объект может быть передан, который изменяет некоторые аспекты форматированного строка:
-
showHidden
- если
true
, то не перечисляемые свойства объекта [те, которые не должны отображаться при использованииfor keys in obj
илиObject.keys(obj)
] будет показано тоже. По умолчанию:false
.
- если
-
depth
- указывает, сколько раз рекурсировать при форматировании объекта. Это полезно для осмотра больших сложных объектов. По умолчанию 2. Чтобы сделать его рекурсивным бесконечно, pass
null
.
- указывает, сколько раз рекурсировать при форматировании объекта. Это полезно для осмотра больших сложных объектов. По умолчанию 2. Чтобы сделать его рекурсивным бесконечно, pass
-
colors
- если true, то вывод будет выполнен с цветовыми кодами ANSI. По умолчанию:
false
. Цвета настраиваются [... - см. ссылку].
- если true, то вывод будет выполнен с цветовыми кодами ANSI. По умолчанию:
-
customInspect
- если
false
, затем custominspect()
функции, определенные на проверяемых объектах, не будут вызываться. По умолчанию:true
.
- если
заполнители (1-й аргумент)
источник:http://nodejs.org/api/util.html#util_util_format_format
-
%s
- строка. -
%d
- число (как целое число, так и float). -
%j
- JSON. -
%
- один знак процента ('%'). Это не требует аргумента.
возможно console.dir
все, что вам нужно.
http://nodejs.org/api/console.html#console_console_dir_obj
использует util.проверьте на obj и печатает результирующую строку в stdout.
используйте опцию util, если вам нужно больше контроля.
Начиная С Узла.js 6.4.0, это можно элегантно решить с помощью util.inspect.defaultOptions
:
require("util").inspect.defaultOptions.depth = null;
console.log(myObject);
хороший способ проверить объекты-использовать node --inspect С Chrome DevTools для узла.
node.exe --inspect www.js
открыть chrome://inspect/#devices
в chrome и нажмите открыть выделенные DevTools для узла
теперь каждый зарегистрированный объект доступен в инспекторе, как обычный JS, работающий в chrome.
нет необходимости повторно открывать инспектор, он подключается к узлу автоматически, как только узел запуск или перезапуск. Оба!--3-->--inspect и Chrome DevTools для узла может быть недоступен в более старых версиях Node и Chrome.
оба эти использования могут быть применены
// more compact and colour can be applied (better for process managers logging)
console.dir(queryArgs, { depth: null, colors: true });
// clear list of actual values
console.log(JSON.stringify(queryArgs, undefined, 2));
вы можете просто добавить inspect()
метод для вашего объекта, который переопределит представление объекта в console.log
сообщения
например:
var myObject = {
"a":"a",
"b":{
"c":"c",
"d":{
"e":"e",
"f":{
"g":"g",
"h":{
"i":"i"
}
}
}
}
};
myObject.inspect = function(){ return JSON.stringify( this, null, ' ' ); }
затем ваш объект будет представлен в соответствии с требованиями в обеих консолях.log и node shell
простой трюк будет использовать debug
модуль, чтобы добавить DEBUG_DEPTH=null
как переменная среды при запуске скрипта
Ex.
DEBUG= * DEBUG_DEPTH=индекс нулевого узла.js
в код
const debug = require('debug');
debug("%O", myObject);
узел REPL имеет встроенное решение для переопределения способа отображения объектов, см. здесь.
модуль REPL внутренне использует
util.inspect()
, при печати значения. Однако,util.inspect
делегирует вызов объектуinspect()
функция, если она есть.
попробуйте эту вспомогательную функцию
const l = (...params) => console.log(...params.map(param => JSON.stringify(param, null, 4)))
использование:
l(obj1,obj2...)
вы также можете использовать его в других средах javascript, таких как помощи PhantomJS