Node.js 中 console.log 打印对象时显示 [Object],如何看到完整内容?

Node.js 的 console.log 对深层对象只显示 [Object]。本文介绍 util.inspect 的 depth 选项、JSON.stringify 以及 console.dir 三种方法,完整打印嵌套对象。

最佳实践
Node.js 中 console.log 打印对象时显示 [Object],如何看到完整内容?封面

解决办法:使用 Node.js 内置的 util.inspect(),把 depth 选项设为 null,即可不限层级地展开整个对象;或者直接使用 console.dir(obj, { depth: null }),效果相同且更简洁。

方法一:util.inspect

const util = require('util');

const myObject = {
  key1: 'value1',
  key2: 'value2',
  key3: { nestedKey: 'nestedValue' }
};

console.log(util.inspect(myObject, { depth: null }));

depth: null 表示不限制递归深度;默认值是 2,超过两层的嵌套就会被折叠成 [Object]。还可以加 colors: true 让输出带颜色,便于阅读。

方法二:console.dir(更简洁)

console.dir 底层就是 util.inspect,可以直接传选项:

console.dir(myObject, { depth: null, colors: true });

方法三:JSON.stringify

如果对象里没有函数、undefined、循环引用,可以序列化成 JSON:

console.log(JSON.stringify(myObject, null, 2));

第三个参数 2 是缩进空格数,输出带格式的多行 JSON。注意:循环引用会抛异常,函数和 undefined 会被丢弃,所以调试复杂对象时还是推荐 console.dir

常见问题(FAQ)

Q:生产环境的日志也适合用 console.dir 吗?
A:不适合。生产环境应该用结构化日志库(如 pino、winston)输出 JSON,便于日志系统解析。console.dir 主要用于本地调试。

Q:打印大对象会拖慢程序吗?
A:会。深度展开大对象是同步的序列化操作,在高并发服务里会阻塞事件循环,调试完记得移除。

Q:浏览器里也有这个问题吗?
A:浏览器控制台默认就是交互式展开对象的,不存在 [Object] 折叠问题,这是 Node.js 终端输出的特有行为。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台