来自(至少)Node.js v0.10.33
(稳定)/ v0.11.14
(不稳定)的许多有用答案的汇编,大概通过(至少)v7.7.4
(截至此答案的最新更新的最新版本)。向Rory O'Kane 致敬,感谢他的帮助。
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
- 如果
true
,那么对象的不可枚举属性 [那些指定在使用for keys in obj
or时不显示的属性Object.keys(obj)
] 也将被显示。默认为false
.
depth
- 告诉检查在格式化对象时递归多少次。这对于检查大型复杂对象很有用。默认为 2。要使其无限期递归,请通过
null
.
colors
- 如果为 true,则输出将使用 ANSI 颜色代码进行样式设置。默认为
false
. 颜色是可定制的 [… – 见链接]。
customInspect
- 如果
false
,则inspect()
不会调用在被检查对象上定义的自定义函数。默认为true
.
util.format()
格式字符串占位符(第一个参数)
一些受支持的占位符是:
有关当前完整列表,请参阅最新的 Node.js 文档。
%s
- 细绳。
%d
– 数字(整数和浮点数)。
%j
– JSON。
%%
– 单个百分号 ('%')。这不会消耗一个论点。