Node.js中往对象内的对象数组push元素后输出不符合预期问题
问题原因
这是Node.js环境console.log的默认输出规则导致的,和你的代码逻辑无关,你写的push操作已经正确执行,数据本身和你预期的完全一致。
Node.js打印对象时默认会调用内置的util.inspect方法做格式化输出,该方法默认的对象嵌套展开深度为2层,超过深度的嵌套对象会被折叠为[Object]占位符:
- 第一层:
abc根对象 - 第二层:
abc.b数组 - 第三层:数组内的
{aa:1, bb:2}这类对象,超出默认展开深度,所以被折叠
你可以单独执行console.log(abc.b[0])验证,会输出完整的{ aa: 1, bb: 2 },说明数据是正确存储的,只是展示时被折叠。
解决方案
下面是几种常用的完整展开打印的方法:
- 使用
JSON.stringify转字符串打印
无需引入额外依赖,适合纯数据对象打印:
// 第二个参数是替换函数,传null即可,第三个参数是缩进空格数 console.log(JSON.stringify(abc, null, 2))
注意:该方法无法打印JSON不支持的类型(比如函数、Symbol、值为undefined的属性等)。
- 使用
console.dir指定展开深度
专门用于对象打印的API,直接配置深度参数即可:
// depth设为null代表无限展开所有嵌套层级 console.dir(abc, { depth: null })
- 手动调用
util.inspect自定义格式化
自由度最高,可以配置更多打印规则:
const util = require('util') console.log(util.inspect(abc, { depth: null, // 展开深度 colors: true // 输出带语法高亮的彩色内容 }))
内容的提问来源于stack exchange,提问作者asrofil
相关产品推荐
相关产品推荐

