3种JS对象打印技巧,告别[object Object]显示问题
你是不是也遇到过这种情况?在控制台里写了个console.log(person)
,结果屏幕上只甩给你一句冷冰冰的[object Object]
,这时候是不是想对着显示器大喊:"我要看的是对象内容,不是要看对象它亲妈都不认识的字符串啊!" 别急,今天咱们就来手把手破解这个让新人抓狂的经典问题。
??先搞懂为啥会显示[object Object]??
其实这是JS对象默认的toString()
方法在搞事情。对象就像个黑盒子,当你要强行把它转成字符串时,它就敷衍地给你个类型标签。举个栗子,你拿外卖时看到包装袋上写着"食物",但具体是麻辣烫还是螺蛳粉?盒子里装的啥?这就得用特殊方法打开来看。
??技巧一:JSON.stringify大法??
这个方法堪称新手村神器,能把对象直接转成带缩进的JSON字符串。就像给你的对象拍X光片,骨骼经络看得清清楚楚:
javascript复制const user = { name: "小明", age: 18, skills: ["干饭", "熬夜"] }; console.log(JSON.stringify(user, null, 2));
输出效果:
json复制{ "name": "小明", "age": 18, "skills": [ "干饭", "熬夜" ] }
??注意点有三??:
- 遇到函数属性会直接隐身(比如对象里有
sayHi(){...}
就显示不出来) - 循环引用会直接报错(比如A对象包含B对象,B又包含A)
- 记得第二个参数填
null
,第三个缩进参数建议用2或4个空格
适用场景 | 不适用场景 |
---|---|
简单对象调试 | 包含函数的复杂对象 |
需要保存日志时 | 存在循环引用的对象树 |
移动端页面调试 | 需要即时交互查看属性时 |
??技巧二:console.dir大法好??
如果说console.log
是把对象当普通值打印,那console.dir
就是专门为对象定制的展示模式。在Chrome调试工具里试试这个:
javascript复制const game = { title: "原神", characters: ["荧", "空"], launch: 2020 }; console.dir(game);
你会看到可展开的三角箭头,点开后所有属性值一目了然,连原型链上的方法都给你扒得明明白白。这个方法的妙处在于:
- 支持实时展开查看嵌套属性
- 显示对象构造函数信息
- 手机浏览器调试时也能用(比alert强一万倍)
但要注意iOS的Safari有个坑——有时候得手动点开控制台的"详细信息"面板才能看到完整内容。这时候建议搭配console.table
使用,表格展示更直观:
javascript复制console.table(game);
??技巧三:解构赋值骚操作??
这个方法特别适合只想看特定属性的场景,就像从快递堆里精准找出自己的包裹:
javascript复制const order = { id: 9527, items: ["手机壳", "贴膜"], price: 66.6 }; const { id, price } = order; console.log("订单号:", id, "实付金额:", price);
输出结果干净利落:订单号: 9527 实付金额: 66.6
进阶玩法可以用展开运算符+对象浅拷贝:
javascript复制console.log({ ...order }); // 自动展开第一层属性
不过要小心这种操作对深层嵌套对象无效,这时候就要祭出终极大招——递归展开
:
javascript复制function deepLog(obj) { console.log(JSON.parse(JSON.stringify(obj))); }
??个人观点时间??
很多新人觉得[object Object]
是JS的设计缺陷,我倒觉得这是编程语言给我们的善意提醒——就像女朋友说"我没事"的时候,你得知道要主动去"展开查看详细信息"。掌握这3招后,建议养成肌肉记忆:
- 简单结构用
JSON.stringify
拍快照 - 复杂调试用
console.dir
深度检查 - 开发环境装上Vue Devtools这类神器
下次再看到那个恼人的[object Object]
,你可以邪魅一笑:"小样,还治不了你了?" 记住,调试不是玄学,对象打印也不是谜语游戏,多练几次这些技巧,保准你能在同事面前秀一把"一眼看穿对象"的超能力!
本文由嘻道妙招独家原创,未经允许,严禁转载