为什么console.log拼接对象或模板字面量输出会显示[object Object]
核心原因
该输出差异由JavaScript对象类型转换规则和console.log的实现逻辑共同导致:
- 直接调用
console.log(obj)时,浏览器/Node.js的控制台针对对象输出做了专门优化,会直接打印对象的结构化内容,方便开发者查看属性,不会强制将对象转为字符串。 - 当执行字符串拼接
'Obj1: ' + obj、模板字面量插值${obj}、手动调用obj.toString()三类操作时,JavaScript会自动触发对象的字符串隐式转换:普通JavaScript对象的默认toString()方法固定返回[object Object],因此拼接后的字符串会出现该结果。
解决方案
常用的两种解决方式如下:
方式1:使用console.log多参数传值
console.log支持传入任意数量参数,控制台会分别处理每个参数的输出格式,无需手动拼接字符串:
// 多个参数用逗号分隔即可 console.log('Obj1: ', obj) console.log('Obj2: ', obj) console.log('Obj3: ', obj)
该方式输出的对象可直接在控制台展开查看属性,可读性最高。
方式2:手动序列化对象为JSON字符串
如果确实需要将对象内容与字符串拼接后输出,可使用JSON.stringify()方法将对象序列化为标准JSON字符串:
// 第二个参数为替换函数,无需自定义时传null即可;第三个参数为缩进空格数,用于格式化输出提升可读性 console.log(`Obj3: ${JSON.stringify(obj, null, 2)}`)
另外你提供的示例代码中,console.log('Obj2: ' + obj.toString()一行缺少右括号,实际运行时需补充。
内容的提问来源于stack exchange,提问作者Meow
相关产品推荐
相关产品推荐

