LocalStorage仅支持字符串存储,存取JSON对象需手动序列化与解析:存前用JSON.stringify()、取后用JSON.parse(),并加try-catch处理非法值;删除用removeItem或clear;注意容量限制、不可序列化类型及同源隔离等坑。

LocalStorage 只支持字符串类型存储,所以存取结构化 JSON 对象时,必须手动做 JSON.stringify() 和 JSON.parse() 转换,否则会出错或丢失数据。
存对象:先转成字符串再保存
直接调用 localStorage.setItem(key, obj) 会把对象自动转成 "[object Object]",导致数据损坏。正确做法是先序列化:
- 用
JSON.stringify()把对象转为合法 JSON 字符串 - 再传给
localStorage.setItem() - 建议加 try-catch,避免非法值(如含函数、undefined、Date 实例)导致报错
示例:
const user = { name: "张三", age: 28, tags: ["js", "web"] };try {
localStorage.setItem("userInfo", JSON.stringify(user));
} catch (e) {
console.error("保存失败", e);
}
取对象:先读字符串再解析
localStorage.getItem() 返回的是字符串,不解析就直接用会得到字符串而非对象:
详细的 Three.js 3D 图形参考,涵盖场景设置、相机、几何体、材质、光照、动画、控制器、加载器、数学工具和调试。
立即学习“Java免费学习笔记(深入)”;
- 先用
getItem()获取原始字符串 - 再用
JSON.parse()还原为对象 - 同样建议 try-catch,防止存储内容被意外篡改或为空
示例:
let data = localStorage.getItem("userInfo");let user;
try {
user = data ? JSON.parse(data) : null;
} catch (e) {
console.error("解析失败", e);
user = null;
}
删对象:用 removeItem 或清空
删除单个键值对用 removeItem(),清空全部用 clear():
-
localStorage.removeItem("userInfo")—— 删除指定 key -
localStorage.clear()—— 清除当前域名下所有 localStorage 数据 - 注意:clear 不会触发 storage 事件的批量通知,每个 key 的删除仍会单独触发
注意事项和常见坑
实际使用中容易忽略这些细节:
- LocalStorage 有容量限制(通常 5MB 左右),大对象可能存不下
- Date、RegExp、Map、Set、函数等无法被 JSON 序列化,需提前处理(如转成时间戳或字符串)
- 不同协议/端口/子域名间 localStorage 不共享,
https://a.com和http://a.com是隔离的 - Storage 事件只在其他同源 tab 中触发,当前页面 setItem 不会触发自己的监听

















