为什么用模板字面量输出Redux store值时显示[object Object]
问题本质
你的写法不存在语法错误,出现[object Object]是两种写法的底层运行逻辑差异导致的:
- 教程里的原写法
console.log('Update state: ', store.getState())是给console.log传了两个独立参数:第一个是描述字符串,第二个是state对象。浏览器控制台会对每个入参单独做类型识别,遇到对象会直接渲染成可交互展开的结构化视图,不会提前做字符串转换,所以能正常看到完整的state内容。 - 模板字面量的插值逻辑是:所有插入
${}里的值,都会被自动强制转换为字符串类型。普通JavaScript对象默认的toString()方法返回值就是固定的[object Object],Redux的state本质就是没有自定义toString方法的普通JS对象,所以插值后就变成了这个固定字符串,控制台拿到的是一整个拼接完成的纯字符串,自然没法展示对象的内部结构。
可行的替代方案
你可以根据实际调试需求选择对应写法:
- 最推荐保留控制台可交互查看对象的能力,直接用多参数传参的写法即可,也就是教程里的原生写法,调试体验最好。
- 如果一定要用模板字面量组织描述文本,可以把对象序列化为格式化的JSON字符串再插入:
console.log(`Update state: ${JSON.stringify(store.getState(), null, 2)}`)
这种方式打印出来是带缩进排版的JSON文本,缺点是打印的是序列化那一刻的对象快照,没法像控制台原生对象那样查看实时更新的嵌套属性。
- 也可以把描述文本用模板字面量编写,对象单独作为后续参数传入,兼顾写法灵活性和控制台调试能力:
console.log(`Update state: `, store.getState())
内容的提问来源于stack exchange,提问作者Data T
相关产品推荐
相关产品推荐

