来自(至少)Node.js v0.10.33
(稳定)/ v0.11.14
(不稳定)的许多有用答案的汇编,大概是通过(至少)v7.7.4
(截至此答案的最新更新的最新版本)。尖帽子的罗里·奥凯恩对他的帮助。
tl;博士
要获得问题示例所需的输出,请使用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
使用多行输出,而完全禁用漂亮打印;它也可以设置为一个数字(默认为)来控制条件多行行为 - 请参阅文档。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()
选项对象(第二个参数):
可以传递一个可选的选项对象来改变格式化字符串的某些方面;支持的一些属性是:
有关当前的完整列表,请参阅最新的 Node.js 文档。
showHidden
- if
true
,则对象的不可枚举属性 [那些指定在您使用for keys in obj
或时不显示的属性Object.keys(obj)
] 也将显示。默认为false
.
depth
- 告诉检查在格式化对象时要递归多少次。这对于检查大型复杂物体很有用。默认为 2。要使其无限递归,请传递
null
。
colors
- 如果为 true,则输出将使用 ANSI 颜色代码进行样式设置。默认为
false
. 颜色是可定制的 [... – 见链接]。
customInspect
- if
false
,则inspect()
不会调用在被检查对象上定义的自定义函数。默认为true
.
util.format()
格式字符串占位符(第一个参数)
一些受支持的占位符是:
有关当前的完整列表,请参阅最新的 Node.js 文档。
%s
- string。
%d
– 数字(整数和浮点数)。
%j
– JSON。
%%
– 单个百分号 ('%')。这不消耗参数。