让 console.log 与复杂对象良好兼容的技巧

2025-06-08

让 console.log 与复杂对象良好兼容的技巧

console.log在很多情况下都很有用(尽管如果您正在这样做的话,通常有更好的方法来调试)。

在浏览器中console.log,对象可以很好地工作,您可以根据需要深入了解所有内容。但在 Node.js 中,当您查看嵌套对象的输出时,通常会看到以下内容:

$ console.log({a: {b: { c: {d: {}}}}})

{ a: { b: { c: [Object] } } }
Enter fullscreen mode Exit fullscreen mode

d: {}被替换为[Object]。但是为什么呢?

这是因为命令行/终端缺乏良好的用户界面来支持向下钻取,所以 Node 会尝试打印最多三层深度的内容。超过三层之后,它只会打印[Object]

这是由节点“util”模块中的变量控制的depth,该变量默认为2。您可以在此处自行设置:

require('util').inspect.defaultOptions.depth = 0; // top level only, e.g.:
// { a: [Object] }
require('util').inspect.defaultOptions.depth = null; // print everything, e.g.: 
// {
//  a: { b: { c: { d: {} } } }
// }
Enter fullscreen mode Exit fullscreen mode

修改底层变量并非好主意,因为它以后可能会带来麻烦。所以更简洁的方法是将 JSON 对象转换为 astring并记录下来。我们可以使用 Node 的内置JSON类和stringify方法:

complexObject = {a: {b: { c: {d: {}}}}}
console.log(JSON.stringify(complexObject, null, 2))

// {
//   "a": {
//     "b": {
//       "c": {
//         "d": {}
//       }
//     }
//   }
// }
Enter fullscreen mode Exit fullscreen mode

请注意,的第三个参数JSON.stringifyNumber2控制缩进的空格数,第二个参数可用于过滤或调整显示的对象和属性。

现在您可以真正看到那些深层物体中有什么。

鏂囩珷鏉ユ簮锛�https://dev.to/ehlo_250/the-trick-to-making-consolelog-play-nice-with-complex-objects-gma
PREV
JavaScript 中的二和问题
NEXT
谷歌桑给巴尔简介