localStorage 存对象为什么取出来变成字符串了?
我用 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]"
toString方法,所以 {name: '小明', age: 18} 被转成了 "[object Object]"。要解决这个问题得先把对象序列化成JSON字符串再存。拿你的代码来说,改成这样就行了:
数组其实也是对象的一种,之前你能直接存可能是因为浏览器的实现细节不同,但这个行为是不可靠的。以后存复杂数据类型记得先转成 JSON 吧,虽然麻烦点但至少不会踩坑。
说到这个真的烦,每次都要手动转来转去,有时候忘记还会浪费不少时间debug...