来自(至少)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使用多行输出,而完全禁用漂亮打印;它也可以设置为一个数字(默认为)来控制条件多行行为 - 请参阅文档。true3
默认情况下,
无论输出是发送到文件还是终端,输出都在 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。
%%– 单个百分号 ('%')。这不消耗参数。