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。
问题描述
两种情况,浏览器 和 命令行。测试范例对象定义:
var obj = {
name: "sunan大叔",
blog: {
"name": "程序如此灵动",
"url":{
www:"https://newsn.net",
info:{
protocol:"https:",
"host":"newsn.net",
"path":"/",
"search":"?aaa",
}
}
}
}在浏览器的console里面,使用console.log()打印任何对象或者变量都是可以的。都可以通过点击左侧箭头的方式,剥丝抽茧。如下图所示:
![解决了问题,节约了时间!我要为苏南大叔买瓶饮料! - 浏览器状况 苏南大叔:nodejs调试,如何打印一个对象的细节内容?而不是[object] - 浏览器状况](/usr/img/water/78/781cd67b56323461.png)
在纯正的nodejs环境下,使用console.log()打印一个普通变量的话,和浏览器里面的表现一致,可以获得想要的效果。但是,试图打印一个深度较大(>=3)的对象的时候,就完全是蒙圈了,会显示[object]的字样。
![解决了问题,节约了时间!我要为苏南大叔买瓶饮料! - 基本状况 苏南大叔:nodejs调试,如何打印一个对象的细节内容?而不是[object] - 基本状况](/usr/img/water/1a/1af66c40fbc49406.png)
那么,如何处理这种问题呢?
方案一【推荐】
console.log('%j', obj);这个算最简单的推荐方案,就是个%j,注意只能是j,意思是json。不过这个方案非常显式的剥夺了.log()可以输出多个变量的功能。
![解决了问题,节约了时间!我要为苏南大叔买瓶饮料! - 格式化 苏南大叔:nodejs调试,如何打印一个对象的细节内容?而不是[object] - 格式化](/usr/img/water/cd/cd132f56cf23514e.png)
方案二
console.log(JSON.stringify(obj))这个方案的结果和上面的%j结果,没有什么区别。如果觉得可读性比较差,就可以试试下面的这个方案:
console.log(JSON.stringify(obj, null, 4));![解决了问题,节约了时间!我要为苏南大叔买瓶饮料! - json格式化版本 苏南大叔:nodejs调试,如何打印一个对象的细节内容?而不是[object] - json格式化版本](/usr/img/water/54/54d7dcc9144de1b8.png)
参考文章:
方案三【推荐】
使用console.dir(),例如:
console.dir(obj, { depth: null });这种情况和原始的只传入一个参数的.log()方案比较而言的话,就是解锁了depth参数。
![解决了问题,节约了时间!我要为苏南大叔买瓶饮料! - 解锁depth参数 苏南大叔:nodejs调试,如何打印一个对象的细节内容?而不是[object] - 解锁depth参数](/usr/img/water/a0/a04724ddbd73ed81.png)
参考文章:
方案四
这个方案里面,引入了默认自带的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}))参考文章:
![解决了问题,节约了时间!我要为苏南大叔买瓶饮料! - 我是最棒的 苏南大叔: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的调试经验文章,请参考下面的链接: