Подборка множества полезных ответов от (как минимум) Node.js v0.10.33
(стабильный) / v0.11.14
(нестабильный), предположительно, до (как минимум) v7.7.4
(текущая версия на момент последнего обновления этого ответа). Совет перед Рори О'Кейну за его помощь.
tl; dr
Чтобы получить желаемый результат для примера в вопросе, используйте console.dir()
:
console.dir(myObject, { depth: null }); // `depth: null` ensures unlimited recursion
Почему не util.inspect()
? Потому что он уже лежит в основе диагностического вывода: console.log()
и console.dir()
, а также REPL для Node.js используют util.inspect()
неявно. Обычно нет необходимости require('util')
и напрямую звонить util.inspect()
.
Подробности ниже.
- The REPL: implicitly prints any expression's return value with
util.inspect()
with syntax coloring;
i.e., just typing a variable's name and hitting Enter will print an inspected version of its value; e.g.:
o = { one: 1, two: 'deux', foo: function(){} } // The REPL echoes the object definition with syntax coloring.
util.inspect()
автоматически распечатывает объект и массив представлений, но выводит многострочный вывод только при необходимости.
Поведение красивой печати можно контролировать с помощью свойства compact
в необязательном аргументе options
; false
использует многострочный вывод безусловно, тогда как true
полностью отключает красивую печать; также можно установить число (по умолчанию 3
) для управления условным многострочным поведением - см. документы.
По умолчанию вывод упаковывается в примерно 60 символов < sup> спасибо, Shrey, независимо от того, отправляется ли вывод в файл или на терминал. На практике, поскольку разрывы строк происходят только на границах свойств, вы часто получаете более короткие строки, но они также могут быть длиннее (например, с длинными значениями свойств).
В v6.3.0 + вы можете использовать параметр breakLength
для отмены ограничения в 60 символов; если вы установите его на Infinity
, все будет выводиться в виде одной строки.
Если вам нужен больший контроль над красивой печатью, рассмотрите возможность использования _ 40_ с третьим аргументом, но обратите внимание на следующее:
- Сбой с объектами, имеющими циклические ссылки, например
module
в глобальном контексте.
- Методы (функции) НЕ будут включены по замыслу.
- Вы не можете выбрать отображение скрытых (неперечислимых) свойств.
- Example call:
JSON.stringify({ one: 1, two: 'deux', three: true}, undefined, 2); // creates a pretty-printed multiline JSON representation indented with 2 spaces
util.inspect()
объект параметров (второй аргумент):
Может быть передан необязательный объект options, который изменяет определенные аспекты форматированной строки; некоторые поддерживаемые свойства:
Текущий полный список см. в последней документации по Node.js. sup>
showHidden
- if
true
, then the object's non-enumerable properties [those designated not to show up when you use for keys in obj
or Object.keys(obj)
] will be shown too. Defaults to false
.
depth
- tells inspect how many times to recurse while formatting the object. This is useful for inspecting large complicated objects. Defaults to 2. To make it recurse indefinitely, pass
null
.
colors
- if true, then the output will be styled with ANSI color codes. Defaults to
false
. Colors are customizable [… – see link].
customInspect
- if
false
, then custom inspect()
functions defined on the objects being inspected won't be called. Defaults to true
.
util.format()
заполнители строки формата (1-й аргумент)
Некоторые поддерживаемые заполнители:
Текущий полный список см. в последних документах по Node.js. sup>
%s
- Строка.
%d
- Число (как целое, так и с плавающей запятой).
%j
- JSON.
%%
- одинарный знак процента («%»). Это не требует аргументов.
person
mklement0
schedule
17.12.2014