从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()。
下面的细节。
Console.log()(及其别名console.info()):
如果第一个参数不是格式字符串:util.inspect()会自动应用到每个参数:
O = {1: 1, 2: 'deux', foo: function(){}};console.log (o,[1、2、3 ]) // -> '{ 一:1、二:“两个”,foo:[功能]}[1,2,3]”
注意,在这种情况下,你不能通过util.inspect()传递选项,这意味着两个值得注意的限制:
输出的结构深度限制为2级(默认值)。
因为你不能用console.log()改变这一点,你必须使用console.dir(): console。dir(myObject, {depth: null}打印无限深度;见下文。
你不能打开语法着色。
如果第一个参数是一个格式字符串(见下文):使用util.format()打印基于格式字符串的其余参数(见下文);例如:
O = {1: 1, 2: 'deux', foo: function(){}};console.log (o为JSON: % j, o ) // -> ' o为JSON:{“一”:1、“两个”:两个“}”
注意:
没有占位符来表示util.inspect()样式的对象。
使用%j生成的JSON不是漂亮打印的。
console.dir ():
只接受1个参数来inspect,并且总是应用util.inspect()——本质上,默认情况下,util.inspect()的包装器没有选项;例如:
O = {1: 1, 2: 'deux', foo: function(){}};console.dir (o);//实际上与console.log(o)在这种情况下相同。
Node.js v0.11.14+:可选的第二个参数指定了util.inspect()的选项-参见下面;例如:
控制台。Dir ({1: 1, 2: 'deux'}, {colors: true});// Node 0.11+:打印带有语法着色的对象表示。
REPL:使用带有语法着色的util.inspect()隐式打印任何表达式的返回值;
例如,只需输入变量名并按Enter键,就会打印出其值的检查版本;例如:
o = {one: 1, two: 'deux', foo: function(){}} // REPL用语法着色回显对象定义。
inspect()自动漂亮地打印对象和数组表示,但只在需要时产生多行输出。
漂亮打印行为可以由可选options参数中的compact属性控制;False无条件地使用多行输出,而true完全禁用漂亮打印;它也可以被设置为一个数字(默认值是3)来控制有条件的多行行为——参见文档。
默认情况下,输出大约60个字符谢谢,Shrey
,不管输出是发送到文件还是终端。在实践中,由于换行只发生在属性边界处,因此您通常会得到较短的行,但它们也可以更长(例如,具有较长的属性值)。
在v6.3.0+中,您可以使用breakLength选项来覆盖60个字符的限制;如果你将它设置为Infinity,所有内容都将输出到一行中。
如果你想对漂亮打印有更多的控制,可以考虑使用带有第三个参数的JSON.stringify(),但请注意以下内容:
对于具有循环引用的对象失败,例如全局上下文中的module。
方法(函数)将被设计不包括在内。
不能选择显示隐藏的(不可枚举的)属性。
示例调用:
JSON。Stringify({一:1,二:'deux',三:true},未定义,2);//创建一个漂亮打印的多行JSON表示,缩进2个空格
inspect()选项对象(第二个参数):
可以传递一个可选的options对象来改变格式化字符串的某些方面;支持的一些属性是:
查看最新的Node.js文档了解当前完整的列表。
showHidden
如果为真,则对象的不可枚举属性[当你在obj或object .keys(obj)中使用键时指定不显示的属性]也将显示。默认为false。
深度
告诉检查在格式化对象时要递归多少次。这对于检查大型复杂对象非常有用。默认值为2。为了使它无限递归,传递null。
颜色
如果为真,则输出将使用ANSI颜色代码进行样式化。默认为false。颜色可定制[…-见链接]。
customInspect
如果为false,则不会调用在被检查对象上定义的自定义inspect()函数。默认为true。
Util.format()格式字符串占位符(第一个参数)
一些受支持的占位符是:
查看最新的Node.js文档了解当前完整的列表。
%s -字符串。
%d -数字(整数和浮点数)。
%j - JSON。
%% -单个百分号(' % ')。这并不消耗一个论点。