LocalStorage 存取结构化对象需用 JSON.stringify() 和 JSON.parse() 序列化/反序列化,特殊类型如 Date 需手动处理,undefined、函数等无法直接存储,建议封装带错误处理的 setStorage 和 getStorage 工具函数。

LocalStorage 只能存储字符串,所以存取结构化对象(如数组、对象、日期等)必须先序列化再反序列化。
存对象:用 JSON.stringify()
直接赋值对象会变成 [object Object],丢失所有数据结构。正确做法是先转成 JSON 字符串:
- 用 JSON.stringify() 把对象转为字符串
- 再用 localStorage.setItem(key, string) 存储
例如:
const user = { name: "张三", age: 28, hobbies: ["读书", "游泳"] };localStorage.setItem("userInfo", JSON.stringify(user));
取对象:用 JSON.parse()
读出的值始终是字符串,必须手动解析才能还原成对象:
立即学习“Java免费学习笔记(深入)”;
- 用 localStorage.getItem(key) 获取字符串
- 再用 JSON.parse() 转回对象
- 注意:如果值为空或不是合法 JSON,
JSON.parse()会报错,建议加 try-catch
例如:
const data = localStorage.getItem("userInfo");const user = data ? JSON.parse(data) : null;
处理特殊类型(Date、undefined、函数等)
JSON 标准不支持 Date、undefined、function、RegExp 等类型,它们会被忽略或转成 null/空字符串:
- Date 对象会变成 ISO 字符串(
new Date().toJSON()),读取后需手动 new Date() 恢复 -
undefined在对象中会被删掉;null和0、false可正常保留 - 函数和 symbol 无法被 JSON 序列化,存之前要剔除或自行转换
安全存取封装建议
避免每次手动写 try-catch 和判空,可封装两个小工具函数:
function setStorage(key, value) {try {
localStorage.setItem(key, JSON.stringify(value));
} catch (e) {
console.warn("localStorage set failed:", e);
}
}
function getStorage(key, defaultValue = null) {
try {
const str = localStorage.getItem(key);
return str ? JSON.parse(str) : defaultValue;
} catch (e) {
console.warn("localStorage get failed:", e);
return defaultValue;
}
}


















