nodejs调试,如何打印一个对象的细节内容?而不是[object]
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
在js
的世界里面,大家还是会经常手动调试程序的。经常会使用console.log()
来打印变量,如果要打印的变量是个普通字符串或者数字之类的,那么这里并不会有什么问题。但是,如果它是个复杂对象呢?是不是可能会得到一个[object]
的提示信息呢?那么,本文就是针对这种问题,提出解决方案的。
大家好,这里是苏南大叔的“程序如此灵动”博客,这里介绍苏南大叔和计算机代码的故事。本文讲述在nodejs
中打印一个对象变量。本文测试环境:win10
,node@16.14.2
,chrome@100.0.4896.60
。
问题描述
两种情况,浏览器 和 命令行。测试范例对象定义:
var obj = {
name: "sunan大叔",
blog: {
"name": "程序如此灵动",
"url":{
www:"https://newsn.net",
info:{
protocol:"https:",
"host":"newsn.net",
"path":"/",
"search":"?aaa",
}
}
}
}
在浏览器的console
里面,使用console.log()
打印任何对象或者变量都是可以的。都可以通过点击左侧箭头的方式,剥丝抽茧。如下图所示:
在纯正的nodejs
环境下,使用console.log()
打印一个普通变量的话,和浏览器里面的表现一致,可以获得想要的效果。但是,试图打印一个深度较大(>=3)的对象的时候,就完全是蒙圈了,会显示[object]
的字样。
那么,如何处理这种问题呢?
方案一【推荐】
console.log('%j', obj);
这个算最简单的推荐方案,就是个%j
,注意只能是j
,意思是json
。不过这个方案非常显式的剥夺了.log()
可以输出多个变量的功能。
方案二
console.log(JSON.stringify(obj))
这个方案的结果和上面的%j
结果,没有什么区别。如果觉得可读性比较差,就可以试试下面的这个方案:
console.log(JSON.stringify(obj, null, 4));
参考文章:
方案三【推荐】
使用console.dir()
,例如:
console.dir(obj, { depth: null });
这种情况和原始的只传入一个参数的.log()
方案比较而言的话,就是解锁了depth
参数。
参考文章:
方案四
这个方案里面,引入了默认自带的util
包,略显复杂。不过核心思想还是解锁depth
参数。
const util = require('util')
console.log(util.inspect(obj, false, null, true))
console.log(util.inspect(obj, {showHidden: false, depth: null, colors:true}))
参考文章:
相关文章
- https://newsn.net/say/nodejs-extend-assign.html
- https://newsn.net/say/nodejs-inarray.html
- https://newsn.net/say/js-replace.html
综述
更多node
的调试经验文章,请参考下面的链接:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。