javascript中用json在localstorage存取数组和对象,需用json.stringify()序列化、json.parse()反序列化,但须处理null/undefined、函数、日期等非标准值并捕获异常;存前校验数据合法性,取时判断字符串有效性并设默认值;日期等特殊类型需手动转换,敏感或复杂数据应避免使用localstorage。

JavaScript中用JSON格式在localStorage中存取数组和对象,核心是序列化与反序列化——用JSON.stringify()转成字符串存,用JSON.parse()还原回来。但直接操作容易出错,关键在于处理null、undefined、函数、日期等非标准JSON值,以及捕获解析失败的异常。
存数据:先校验再序列化
localStorage只支持字符串,必须把数组或对象转成JSON字符串。但原始数据里若有函数、undefined、Symbol或循环引用,JSON.stringify()会报错或静默丢失字段。
- 存之前先检查数据是否可安全序列化:避免含函数、原型方法或非法类型
- 对可能为
null或undefined的值做兜底,比如默认为空对象{}或空数组[] - 推荐封装写法,带错误提示:
function saveToStorage(key, data) {
try {
const jsonStr = JSON.stringify(data);
localStorage.setItem(key, jsonStr);
} catch (e) {
console.error('保存失败:', e.message);
}
}
取数据:先读再解析,始终加异常处理
localStorage.getItem()返回的是字符串或null。如果之前没存过,或存的是空字符串,JSON.parse(null)会变成null,JSON.parse('')则直接报错。
- 必须判断返回值是否为有效字符串,再解析
- 用
try...catch包裹JSON.parse(),防止因损坏数据导致脚本中断 - 解析失败时返回合理默认值(如
[]或{})
function loadFromStorage(key, defaultValue = []) {
const str = localStorage.getItem(key);
if (!str) return defaultValue;
try {
return JSON.parse(str);
} catch (e) {
console.warn('解析失败,返回默认值:', e.message);
return defaultValue;
}
}
注意日期、正则等特殊值的丢失问题
原生JSON.stringify()会把Date对象转成ISO字符串,JSON.parse()后变成普通字符串,不再是Date实例;RegExp、Map、Set等根本无法直接序列化。
- 若需保留日期对象,存之前转成时间戳
date.getTime(),取出来再用new Date(ms)重建 - 正则建议存成字符串形式
/pattern/g→{ source: 'pattern', flags: 'g' },读取时用new RegExp(...)构造 - 复杂结构(如含函数或自定义类)不适合用localStorage,应考虑IndexedDB或状态管理库
实际使用小技巧
- 给key加前缀避免冲突,比如
'myapp-user-preferences' - 存大数组时注意浏览器限制(通常5MB),超限时可分片或压缩
- 敏感数据别存——localStorage不加密、无访问控制,仅适合存非敏感配置或缓存
- 修改后及时同步:更新对象后调用
saveToStorage,不要只改内存副本
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











