如何在Node.js的console.log()中获得完整的对象,而不是“ [Object]”?

使用进行调试时console.log(),如何获取完整的对象?

const myObject = {
   "a":"a",
   "b":{
      "c":"c",
      "d":{
         "e":"e",
         "f":{
            "g":"g",
            "h":{
               "i":"i"
            }
         }
      }
   }
};    
console.log(myObject);

输出:

{ a: 'a', b: { c: 'c', d: { e: 'e', f: [Object] } } }

但我也想看看财产的内容f

小卤蛋宝儿2020/03/10 12:11:40

JSON.stringify()

let myVar = {a: {b: {c: 1}}};
console.log(JSON.stringify( myVar, null, 4 ))

非常适合深度检查数据对象。这种方法适用于嵌套数组和带有数组的嵌套对象。

猪猪卡卡西西里2020/03/10 12:11:40

REPL节点具有一个内置的解决方案,用于覆盖对象的显示方式,请参见此处

util.inspect()在打印值时,REPL模块内部使用但是,util.inspect将调用委托给对象的inspect() 函数(如果有)。

前端Pro2020/03/10 12:11:40

您可以简单地inspect()向您的对象添加一个方法,方法将覆盖console.log消息中对象的表示形式

例如:

var myObject = {
   "a":"a",
   "b":{
      "c":"c",
      "d":{
         "e":"e",
         "f":{
            "g":"g",
            "h":{
               "i":"i"
            }
         }
      }
   }
};
myObject.inspect = function(){ return JSON.stringify( this, null, ' ' ); }

然后,您的对象将在console.log和节点shell中按需要表示

Eva千羽2020/03/10 12:11:40

检查对象的一种好方法是在Chrome DevTools for Node中使用node --inspect选项

node.exe --inspect www.js

chrome://inspect/#devices在chrome中打开,然后点击打开Node专用的DevTools

现在,每个检查到的对象都可以在检查器中使用,就像在chrome中运行的常规JS一样。

在此处输入图片说明

无需重新打开检查器,它会在节点启动或重新启动后立即自动连接到节点。无论--inspect为节点的Chrome DevTools可能无法在旧版本的节点和Chrome浏览器使用。

JinJin米亚2020/03/10 12:11:40

你也可以

console.log(JSON.stringify(myObject, null, 3));
米亚番长2020/03/10 12:11:40

这两种用法都可以应用

// more compact and colour can be applied (better for process managers logging)

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

// clear list of actual values

console.log(JSON.stringify(queryArgs, undefined, 2));
Stafan神乐2020/03/10 12:11:40

也许console.dir就是您所需要的。

http://nodejs.org/api/console.html#console_console_dir_obj

在obj上使用util.inspect并将结果字符串输出到stdout。

如果需要更多控制,请使用util选项。

飞云卡卡西2020/03/10 12:11:40

尝试这个:

console.dir(myObject,{depth:null})
泡芙阿飞斯丁2020/03/10 12:11:40

从Node.js 6.4.0开始,可以使用以下方法优雅地解决此问题util.inspect.defaultOptions

require("util").inspect.defaultOptions.depth = null;
console.log(myObject);
樱L2020/03/10 12:11:40

您可以使用JSON.stringify,获得一些不错的缩进以及可能更容易记住的语法。

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

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

第三个参数设置缩进级别,因此您可以根据需要进行调整。

如果需要,请在此处提供更多详细信息:

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify