Javascript 如何在Node.js';s console.log(),而不是';[对象]';?
使用Javascript 如何在Node.js';s console.log(),而不是';[对象]';?,javascript,node.js,debugging,console.log,Javascript,Node.js,Debugging,Console.log,使用console.log()进行调试时,如何获取完整对象 const myObject = { "a":"a", "b":{ "c":"c", "d":{ "e":"e", "f":{ "g":"g", "h":{ "i":"i" } } } } }; console.log(m
console.log()
进行调试时,如何获取完整对象
const myObject = {
"a":"a",
"b":{
"c":"c",
"d":{
"e":"e",
"f":{
"g":"g",
"h":{
"i":"i"
}
}
}
}
};
console.log(myObject);
产出:
{ a: 'a', b: { c: 'c', d: { e: 'e', f: [Object] } } }
但是我还想查看属性
f
的内容,您需要使用util.inspect()
:
输出
{ a: 'a', b: { c: 'c', d: { e: 'e', f: { g: 'g', h: { i: 'i' } } } } }
请参阅。您需要使用
util.inspect()
:
输出
{ a: 'a', b: { c: 'c', d: { e: 'e', f: { g: 'g', h: { i: 'i' } } } } }
请参阅。您可以使用
JSON.stringify
,并获得一些很好的缩进以及可能更容易记住的语法
console.log(JSON.stringify(myObject, null, 4));
第三个参数设置缩进级别,因此可以根据需要调整缩进级别 如有需要,请在此提供更多详细信息:
您可以使用
JSON.stringify
,并获得一些很好的缩进以及可能更容易记住的语法
console.log(JSON.stringify(myObject, null, 4));
第三个参数设置缩进级别,因此可以根据需要调整缩进级别 如有需要,请在此提供更多详细信息:
另一个简单的方法是将其转换为json
console.log('connection : %j', myObject);
另一个简单的方法是将其转换为json
console.log('connection : %j', myObject);
也许您只需要
console.dir
在obj上使用util.inspect并将结果字符串打印到标准输出
如果您需要更多控制,请使用util选项。也许
控制台。dir
就是您所需要的全部
在obj上使用util.inspect并将结果字符串打印到标准输出
如果需要更多控制,请使用util选项。
(至少)Node.jsv0.10.33
(稳定)/v0.11.14
(不稳定)中的许多有用答案的汇编,可能通过(至少)v7.7.4
(此答案最新更新的当前版本)。向他表示感谢
tl;dr
要获得问题中示例的所需输出,请使用:
为什么不util.inspect()
?因为它已经是诊断输出的核心:console.log()
和console.dir()
以及Node.js REPL隐式地使用util.inspect()。通常不需要要求('util')
并直接调用util.inspect()
详情如下
- (及其别名为:):
- 如果第一个参数不是格式字符串:将自动应用于每个参数:
o={one:1,two'deux',foo:function(){};log(o[1,2,3])/->'{1:1,2:'deux',foo:[Function]}[1,2,3]'
- 请注意,在这种情况下,无法通过
util.inspect()传递选项,这意味着有两个显著的限制:
- 输出的结构深度限制为2个级别(默认值)。
- 由于无法使用
console.log()
,因此必须改用console.dir()
:console.dir(myObject,{depth:null}
以无限深度打印;请参见下文
- 无法启用语法着色
- 如果第一个参数是格式字符串(见下文):用于根据格式字符串打印其余参数(见下文);例如:
o={one:1,two:'deux',foo:function(){};console.log('o作为JSON:%j',o)/->'o作为JSON:{“one”:1,two:“deux”}'
- 注:
- 没有用于表示对象的占位符
util.inspect()
-style
- 用
%j
生成的JSON打印得不好
- :
- 只接受1个参数进行检查,并且始终适用–本质上是
util.inspect()
的包装,默认情况下没有选项;例如:
o={one:1,two'deux',foo:function(){};console.dir(o);//在这种情况下,实际上与console.log(o)相同。
- Node.js v0.11.14+:可选的第二个参数指定
util.inspect()
的选项–请参见下文;例如:
console.dir({one:1,two'deux'},{colors:true});//节点0.11+:使用语法着色打印对象表示。
- REPL:使用语法着色的
隐式打印任何表达式的返回值util.inspect()
i、 例如,只需键入一个变量的名称并按Enter键即可打印其值的检查版本;例如:o={one:1,two:'deux',foo:function(){}//REPL使用语法着色回显对象定义。
- 漂亮打印行为可以通过可选的
参数中的选项
属性来控制;压缩
无条件使用多行输出,而假
完全禁用漂亮打印;它也可以设置为一个数字(默认值为真
)要控制条件多行行为,请参见3
- 默认情况下,输出是包装的, ,而不管输出是发送到文件还是终端。实际上,由于换行仅发生在属性边界处,因此通常会以较短的行结束,但也可能较长(例如,属性值较长)
- 在v6.3.0+中,您可以使用
选项覆盖60个字符的限制;如果将其设置为breakLength
,则所有内容都在一行上输出无穷大
<强>如果您希望对漂亮的打印进行更多的控制,请考虑使用第三个参数>,但请注意以下内容:
- 对于具有循环引用的对象(例如全局上下文中的
)失败模块
- M
var myObject = { "a":"a", "b":{ "c":"c", "d":{ "e":"e", "f":{ "g":"g", "h":{ "i":"i" } } } } }; myObject.inspect = function(){ return JSON.stringify( this, null, ' ' ); }
const util = require('util') var myObject = { /* nested properties not shown */ } myObject[util.inspect.custom] = function(){ return JSON.stringify( this, null, 4 ); } console.log(util.inspect(myObject))
console.dir(myObject,{depth:null})
console.log(JSON.stringify(myObject, null, 3));
require("util").inspect.defaultOptions.depth = null; console.log(myObject);
node.exe --inspect www.js
const debug = require('debug'); debug("%O", myObject);
// more compact, and colour can be applied (better for process managers logging) console.dir(queryArgs, { depth: null, colors: true }); // get a clear list of actual values console.log(JSON.stringify(queryArgs, undefined, 2));
let myVar = {a: {b: {c: 1}}}; console.log(JSON.stringify( myVar, null, 4 ))
console.log(util.inspect(value, { maxArrayLength: Infinity }));