Skip to content

如何在 Node.js 中输出获取完整对象而非 '[Object]'

Posted on:2023年10月27日 at 22:03

在 Node.js 的开发过程中,console.log() 是开发者们最常用的调试工具之一,用于将对象或变量输出到控制台。然而,当面对复杂的嵌套对象时,console.log() 的输出往往会被截断,仅显示 ‘[Object]’ 字样,无法完整呈现对象的结构和内容。这对于调试和理解代码逻辑造成了一定的阻碍。

为了解决这一问题,Node.js 提供了两种有效的方法来获取完整的对象输出:util.inspect() 和 console.dir()。这两种方法都能够将对象转换为字符串,并详细展示对象的属性、值和类型等信息。

方法一:util.inspect()

util.inspect() 方法来自 Node.js 内置的 util 模块,专门用于将对象转换为可读性强的字符串。它提供了丰富的选项来控制输出的格式和深度。例如,可以通过设置 depth 选项来指定递归输出的深度,从而完整呈现嵌套对象的结构。

const util = require("util");

const myObject = {
  a: "a",
  b: {
    c: "c",
    d: {
      e: "e",
      f: {
        g: "g",
        h: {
          i: "i",
        },
      },
    },
  },
};

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

上述代码将输出完整的对象结构,包括所有嵌套属性和值:

{ a: 'a', b: { c: 'c', d: { e: 'e', f: { g: 'g', h: { i: 'i' } } } } }

方法二:console.dir()

console.dir() 方法是 console.log() 的近亲,专注于输出对象的详细信息。它实际上是调用了 util.inspect() 方法来进行对象转换和输出。因此,它同样支持 depth 选项来控制递归深度。

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

这将产生与 util.inspect() 方法相同的输出结果。

注意事项和建议

在使用 util.inspect() 或 console.dir() 方法时,需要注意以下几点: