JavaScript深层嵌套对象显示[Object]而非实际结构问题问询
为什么嵌套对象打印时会显示
[Object]而不是完整嵌套结构? 别担心,这是个超常见的JS新手问题,完全有直白的解释~
你看到的[Object]其实是JavaScript运行环境(不管是Node.js还是浏览器控制台)的默认打印优化行为:当对象的嵌套层数超过了环境设定的显示深度阈值时,为了避免输出内容过长、可读性太差,就会自动把深层的对象简写为[Object]。
具体原因拆解
你写的这段代码其实是在构建一个简单的链表结构,每个对象的rest属性都指向另一个对象:
var obj1 = {v: 1, rest: null} var obj2 = {v: 2, rest: obj1} var obj3 = {v: 3, rest: obj2} var obj4 = {v: 4, rest: obj3} var obj5 = {v: 5, rest: obj4}
从你的输出能看出来:
obj1到obj3的嵌套层数比较浅,没超过默认显示深度,所以能完整打印;obj4和obj5的嵌套层数更深,超过了阈值,所以深层的嵌套对象就被简化成[Object]了。
如何查看完整的嵌套结构?
有几个简单的方法可以解决这个问题:
用
JSON.stringify()转换为字符串:这个方法能把对象转换成完整的JSON格式字符串,还能设置缩进让输出更美观:console.log(JSON.stringify(obj5, null, 2));这里第二个参数
null表示保留所有属性,第三个参数2是缩进的空格数。调整Node.js的打印深度:如果是在Node.js环境下,可以用
util.inspect自定义打印深度:const util = require('util'); console.log(util.inspect(obj5, { depth: null }));depth: null表示不限制嵌套深度,会完整打印所有层级的内容。浏览器控制台手动展开:要是在浏览器开发者工具的控制台里打印对象,直接点击对象前的小箭头就能手动展开深层结构,看到完整内容啦。
本质上这不是你的代码有问题,只是控制台为了体验做的小优化而已😉
内容的提问来源于stack exchange,提问作者PeteG
相关产品推荐
相关产品推荐

