💓 博客主页:瑕疵的CSDN主页
📝 Gitee主页:瑕疵的gitee主页
⏩ 文章专栏:《热点资讯》
存个对象到localStorage,结果[object Object]?
目录
昨晚写登录状态,随手存个user对象。
代码写得贼溜:
localStorage.setItem('user', { name: '张三', age: 25 });
第二天取出来:
const user = localStorage.getItem('user');
console.log(user); // 输出 [object Object]
当场傻眼。这玩意儿咋回事?
根源:
localStorage 他妈的只认字符串!你存个对象,它自动调用 toString(),直接吐出 [object Object]。
不是它不认对象,是它压根儿没这个功能。就像你往水桶里塞个苹果,桶只认水,苹果塞进去就变成“水果”了——但你塞了块砖头,桶只能回你“砖头”。
解决代码:
错误写法(别学):
// 存对象 → 会变成 [object Object]
localStorage.setItem('user', { name: '张三', age: 25 });
// 取出来 → 拿到字符串 "[object Object]"
const user = localStorage.getItem('user');
console.log(user); // [object Object]
正确写法(必须用):
// 存之前转成字符串
const user = { name: '张三', age: 25 };
localStorage.setItem('user', JSON.stringify(user)); // 关键:用 stringify
// 取出来转回对象
const stored = localStorage.getItem('user');
const parsedUser = JSON.parse(stored); // 关键:用 parse
console.log(parsedUser); // { name: '张三', age: 25 }
避坑总结:
- localStorage 是字符串仓库,不是对象仓库。存任何东西都得先转成字符串。
- 用 JSON.stringify 存,JSON.parse 取。这是铁律。
- 别忘了处理空值:存了 null 或 undefined 时,解析会报错。
// 安全写法
const stored = localStorage.getItem('user');
const user = stored ? JSON.parse(stored) : null; - 常见坑:以为存数组能直接用。存数组也得 stringify:
localStorage.setItem('list', JSON.stringify([1,2,3]));
我去年被这问题坑到凌晨三点。同事还笑我:“就这?还前端呢?”
现在写代码前必默念:存对象?先转 JSON。别让 [object Object] 再出来丢人。