nodejs调试,如何打印一个对象的细节内容?而不是[object]
发布于 作者:苏南大叔 来源:程序如此灵动~

在js
的世界里面,大家还是会经常手动调试程序的。经常会使用console.log()
来打印变量,如果要打印的变量是个普通字符串或者数字之类的,那么这里并不会有什么问题。但是,如果它是个复杂对象呢?是不是可能会得到一个[object]
的提示信息呢?那么,本文就是针对这种问题,提出解决方案的。
![苏南大叔到底是谁?!? - console-dir 苏南大叔:nodejs调试,如何打印一个对象的细节内容?而不是[object] - console-dir](/usr/img/water/ff/ff19b7d75dfd83f3.png)
大家好,这里是苏南大叔的“程序如此灵动”博客,这里介绍苏南大叔和计算机代码的故事。本文讲述在nodejs
中打印一个对象变量。本文测试环境:win10
,node@16.14.2
,chrome@100.0.4896.60
。
问题描述
两种情况,浏览器 和 命令行。测试范例对象定义:
在浏览器的console
里面,使用console.log()
打印任何对象或者变量都是可以的。都可以通过点击左侧箭头的方式,剥丝抽茧。如下图所示:
![解决了问题,节约了时间!我要为苏南大叔买瓶饮料! - 浏览器状况 苏南大叔:nodejs调试,如何打印一个对象的细节内容?而不是[object] - 浏览器状况](/usr/img/water/78/781cd67b56323461.png)
在纯正的nodejs
环境下,使用console.log()
打印一个普通变量的话,和浏览器里面的表现一致,可以获得想要的效果。但是,试图打印一个深度较大(>=3)的对象的时候,就完全是蒙圈了,会显示[object]
的字样。
![解决了问题,节约了时间!我要为苏南大叔买瓶饮料! - 基本状况 苏南大叔:nodejs调试,如何打印一个对象的细节内容?而不是[object] - 基本状况](/usr/img/water/1a/1af66c40fbc49406.png)
那么,如何处理这种问题呢?
方案一【推荐】
这个算最简单的推荐方案,就是个%j
,注意只能是j
,意思是json
。不过这个方案非常显式的剥夺了.log()
可以输出多个变量的功能。
![解决了问题,节约了时间!我要为苏南大叔买瓶饮料! - 格式化 苏南大叔:nodejs调试,如何打印一个对象的细节内容?而不是[object] - 格式化](/usr/img/water/cd/cd132f56cf23514e.png)
方案二
这个方案的结果和上面的%j
结果,没有什么区别。如果觉得可读性比较差,就可以试试下面的这个方案:
![解决了问题,节约了时间!我要为苏南大叔买瓶饮料! - json格式化版本 苏南大叔:nodejs调试,如何打印一个对象的细节内容?而不是[object] - json格式化版本](/usr/img/water/54/54d7dcc9144de1b8.png)
参考文章:
方案三【推荐】
使用console.dir()
,例如:
这种情况和原始的只传入一个参数的.log()
方案比较而言的话,就是解锁了depth
参数。
![解决了问题,节约了时间!我要为苏南大叔买瓶饮料! - 解锁depth参数 苏南大叔:nodejs调试,如何打印一个对象的细节内容?而不是[object] - 解锁depth参数](/usr/img/water/a0/a04724ddbd73ed81.png)
参考文章:
方案四
这个方案里面,引入了默认自带的util
包,略显复杂。不过核心思想还是解锁depth
参数。
参考文章:
![解决了问题,节约了时间!我要为苏南大叔买瓶饮料! - 我是最棒的 苏南大叔:nodejs调试,如何打印一个对象的细节内容?而不是[object] - 我是最棒的](/usr/img/water/11/1169121790c52c0c.png)
相关文章
- https://newsn.net/say/nodejs-extend-assign.html
- https://newsn.net/say/nodejs-inarray.html
- https://newsn.net/say/js-replace.html
综述
更多node
的调试经验文章,请参考下面的链接:


