大概是通过(
至少)Node.js v0.10.33
(稳定)/ v0.11.14
(不稳定)的许多有用答案的汇编(v7.7.4
此答案的最新更新为当前版本)。向Rory O'Kane求助。
tl; dr
要获得问题示例的所需输出,请使用console.dir()
:
console.dir(myObject, { depth: null }); // `depth: null` ensures unlimited recursion
为什么不util.inspect()
呢?因为它已经在诊断输出的心脏:console.log()
和console.dir()
以及Node.js的REPL 使用util.inspect()
隐式。它通常没有必要require('util')
,并调用util.inspect()
直接。
详细信息如下。
- REPL:使用 语法着色隐式打印任何表达式的返回值
util.inspect()
;
即,只需输入变量的名称并按Enter键,将打印其值的检查版本;例如:
o = { one: 1, two: 'deux', foo: function(){} } // The REPL echoes the object definition with syntax coloring.
util.inspect()
自动漂亮地打印对象和数组表示,但是仅在需要时才产生多行输出。
漂亮的打印行为可以由compact
可选options
参数中的属性控制。无条件false
使用多行输出,而完全禁用漂亮打印;也可以将其设置为一个数字(默认值为)以控制条件多行行为–请参阅docs。true
3
默认情况下,
无论输出是发送到文件还是终端,输出都会用大约60个字符包装,感谢Shrey。实际上,由于换行仅发生在属性边界处,所以您通常会得到较短的行,但它们也可能更长(例如,具有较长的属性值)。
在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()
选项对象(第二个参数):
可以传递一个可选的options对象,以更改格式化字符串的某些方面;支持的一些属性包括:
有关最新的完整列表,请参阅最新的Node.js文档。
showHidden
- 如果为
true
,则还将显示对象的不可枚举的属性[在使用for keys in obj
或时指定为不显示的属性Object.keys(obj)
]。默认为false
。
depth
- 告诉检查格式化对象时要递归多少次。这对于检查大型复杂对象很有用。默认为2。要使其无限期递归,请传递
null
。
colors
- 如果为true,则将使用ANSI颜色代码设置输出样式。默认为
false
。颜色是可自定义的[…–参见链接]。
customInspect
- 如果为
false
,则inspect()
不会调用在被检查对象上定义的自定义函数。默认为true
。
util.format()
格式字符串占位符(第一个参数)
一些受支持的占位符是:
有关最新的完整列表,请参阅最新的Node.js文档。
%s
–字符串。
%d
–数字(整数和浮点数)。
%j
– JSON。
%%
–单个百分号('%')。这不消耗参数。