localStorage 存对象为什么取出来变成字符串了?

书瑜 阅读 30

我用 localStorage.setItem('user', {name: '小明', age: 18}) 存了个对象,结果下次读的时候发现拿到的是 “[object Object]”,根本没法用。明明 console.log 出去看起来没问题啊?

是不是得手动转 JSON?但我记得之前好像直接存过数组也没问题……到底哪里出错了?

const user = { name: '小明', age: 18 };
localStorage.setItem('user', user);
const saved = localStorage.getItem('user');
console.log(saved); // 输出 "[object Object]"
我来解答 赞 5 收藏
二维码
手机扫码查看
1 条解答
Des.梦轩
localStorage只能存字符串,你直接把对象存进去当然会出问题。JavaScript在处理非字符串类型的值时会调用 toString 方法,所以 {name: '小明', age: 18} 被转成了 "[object Object]"。

要解决这个问题得先把对象序列化成JSON字符串再存。拿你的代码来说,改成这样就行了:


const user = { name: '小明', age: 18 };
// 存的时候转成 JSON 字符串
localStorage.setItem('user', JSON.stringify(user));

// 取出来再解析回对象
const saved = JSON.parse(localStorage.getItem('user'));
console.log(saved); // 现在能正常输出对象了


数组其实也是对象的一种,之前你能直接存可能是因为浏览器的实现细节不同,但这个行为是不可靠的。以后存复杂数据类型记得先转成 JSON 吧,虽然麻烦点但至少不会踩坑。

说到这个真的烦,每次都要手动转来转去,有时候忘记还会浪费不少时间debug...
点赞
2026-03-26 11:09