При отладке с помощью 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
.
javascript
node.js
debugging
console.log
Михал Перлаковский
источник
источник
v0.10.33
console.log()
неявно применяетсяutil.inspect()
к своим аргументам, предполагая, что 1-й не является строкой формата. Если вы довольныutil.inspect()
параметрами по умолчанию, простоconsole.log(myObject)
подойдет - не требуетсяutil
;console.dir()
делает то же самое, но принимает только `объект для проверки; по крайней мереv0.11.14
, вы можете передать объект параметровutil.inspect()
как второй аргумент; мой ответ имеет больше деталей.console.log(obj)
он все еще печатает [Object] для глубоко вложенных объектов :( Мне бы очень хотелось, чтобы он вел себя так, как вы описываете.console.log()
это неизбежно ограничивается 2 уровня (поскольку он использует поutil.inspect()
умолчанию «s , не позволяя изменять его);console.dir()
имеет то же ограничение по умолчанию, но вы можете передать объект параметров в качестве второго аргумента, чтобы изменить его (который передаетсяutil.inspect()
; обратите внимание, что , однако ,console.dir()
можно печатать только один объект за раз. Чтобы печатать с неограниченной глубиной, используйтеconsole.dir(myObject, { depth: null })
.console.dir(myObject, { depth: null })
это работа для меняВы можете использовать
JSON.stringify
и получить хороший отступ, а также, возможно, легче запомнить синтаксис.Третий аргумент устанавливает уровень отступа, так что вы можете настроить его по своему усмотрению.
Более подробно здесь, если это необходимо:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
источник
console.log(JSON.stringify(myObject, null, 4));
довольно круто! https://gist.github.com/xgqfrms-GitHub/92aa2b00249f15084d24aa2e0a5d0300Компиляция множества полезных ответов из (как минимум) Node.js
v0.10.33
(стабильный) /v0.11.14
(нестабильный) предположительно через (как минимум)v7.7.4
(версия, текущая на момент последнего обновления этого ответа). Кончик шляпы Рори О'Кейну за помощь.ТЛ; др
Чтобы получить желаемый результат для примера в вопросе, используйте
console.dir()
:Почему нет
util.inspect()
? Потому что это уже в основе диагностической продукции:console.log()
иconsole.dir()
, а также Node.js РЕПЛ использоватьutil.inspect()
неявно . Это вообще не нужноrequire('util')
и звонитьutil.inspect()
напрямую.Подробности ниже.
console.log()
(и его псевдонимconsole.info()
):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 примечательного ограничение:console.log()
, вы должны вместо этого использоватьconsole.dir()
:console.dir(myObject, { depth: null }
печать с неограниченной глубиной ; см. ниже.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()
стиле.%j
, НЕ довольно напечатан.console.dir()
:util.inspect()
- по существу, обертку дляutil.inspect()
без параметров по умолчанию; например:o = { one: 1, two: 'deux', foo: function(){} }; console.dir(o); // Effectively the same as console.log(o) in this case.
util.inspect()
- см. Ниже; например:console.dir({ one: 1, two: 'deux'}, { colors: true }); // Node 0.11+: Prints object representation with syntax coloring.
util.inspect()
с синтаксической раскраской ;то есть, просто набрав имя переменной и нажав Enter, вы увидите проверенную версию ее значения; например:
o = { one: 1, two: 'deux', foo: function(){} } // The REPL echoes the object definition with syntax coloring.
util.inspect()
автоматически довольно-принты объект и массив представлений , но производит многострочный вывод только при необходимости .Поведение симпатичной печати может контролироваться
compact
свойством в необязательномoptions
аргументе; безоговорочноfalse
использует многострочный вывод , а вообще отключает симпатичную печать; он также может быть установлен на число (по умолчанию ) для управления условным многострочным поведением - см. документацию .true
3
По умолчанию, вывод выводится около 60 символов , Шрей , независимо от того, отправляется ли вывод в файл или на терминал. На практике, поскольку разрывы строк происходят только на границах свойств , вы часто будете иметь более короткие строки, но они также могут быть более длинными (например, с длинными значениями свойств).
В v6.3.0 + вы можете использовать
breakLength
опцию, чтобы переопределить ограничение в 60 символов; если вы установите егоInfinity
, все выводится в одной строке.Если вы хотите больше контроля над симпатичной печатью, рассмотрите возможность использования
JSON.stringify()
с третьим аргументом , но обратите внимание на следующее: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-й аргумент):Может быть передан необязательный объект параметров, который изменяет определенные аспекты форматированной строки; некоторые из поддерживаемых свойств:
См. Последние документы Node.js для текущего, полного списка.
showHidden
true
, то будут показаны также не перечисляемые свойства объекта [те, которые не отображаются при использованииfor keys in obj
илиObject.keys(obj)
). Значения по умолчанию дляfalse
.depth
null
.colors
false
. Цвета настраиваются [… - см. Ссылку].customInspect
false
, то пользовательскиеinspect()
функции, определенные для проверяемых объектов, вызываться не будут. Значения по умолчанию дляtrue
.util.format()
заполнители строки формата (1-й аргумент)Некоторые из поддерживаемых заполнителей:
См. Последние документы Node.js для текущего, полного списка.
%s
- Струна.%d
- Число (как целое число, так и число с плавающей запятой).%j
- JSON.%%
- один знак процента («%»). Это не потребляет аргумента.источник
console.dir(...)
без всей типизации:show = (v, depth=null)=> console.dir(v,{depth:depth})
и затем вызывать ее такshow(variable)
илиshow(variable, depth=1)
.Другой простой метод - конвертировать его в JSON.
источник
utils
:)Попробуй это:
источник
Начиная с Node.js 6.4.0, это можно элегантно решить с помощью
util.inspect.defaultOptions
:источник
Возможно,
console.dir
это все, что вам нужно.http://nodejs.org/api/console.html#console_console_dir_obj
используйте утилиту, если вам нужно больше контроля.
источник
options
объектutil.inspect
.util.inspect()
.Вы также можете сделать
источник
Хороший способ проверки объектов - использовать параметр node --inspect с Chrome DevTools для Node .
Откройте
chrome://inspect/#devices
Chrome и нажмите Открыть выделенный DevTools для узлаТеперь каждый зарегистрированный объект доступен в инспекторе, как обычный JS, работающий в Chrome.
Нет необходимости повторно открывать инспектор, он подключается к узлу автоматически, как только узел запускается или перезапускается. И --inspect, и Chrome DevTools for Node могут быть недоступны в более старых версиях Node и Chrome.
источник
node.exe --inspect index.js
Оба эти использования могут быть применены:
источник
Я думаю, что это может быть полезно для вас.
Как уже упоминалось в этом ответе :
источник
Вы можете просто добавить
inspect()
метод к вашему объекту, который переопределит представление объекта вconsole.log
сообщенияхнапример:
тогда ваш объект будет представлен как требуется как в console.log, так и в оболочке узла
источник
Простой трюк - использовать
debug
модуль для добавления вDEBUG_DEPTH=null
качестве переменной среды при запуске скрипта.Ex.
DEBUG = * DEBUG_DEPTH = нулевой узел index.js
В вашем коде
источник
Узел REPL имеет встроенное решение для переопределения отображения объектов, см. Здесь .
источник
Самый простой вариант:
источник
myObject
на произвольную глубинуJSON.stringify ()
Отлично подходит для глубокой проверки объектов данных. Этот подход работает с вложенными массивами и вложенными объектами с массивами.
источник