localstorage存取对象必须先用json.stringify()序列化再存,读取后用json.parse()解析;需处理特殊类型、加try...catch容错,并封装setjson/getjson工具函数确保安全。

LocalStorage 本身只认字符串,所以存对象或数组必须先用 JSON.stringify() 转成字符串,读出来再用 JSON.parse() 还原——这是配合 JSON 使用的唯一正确路径,绕不开也省不了。
存之前:必须序列化,还要防踩坑
直接 localStorage.setItem('data', obj) 会把对象变成 "[object Object]",再也无法还原。真正安全的做法是:
- 用
JSON.stringify(obj)转成合法 JSON 字符串再存 - 对可能含
undefined、函数、Date、RegExp的数据提前处理(比如 Date 存成date.toISOString()或时间戳) - 加
try...catch捕获序列化失败(如循环引用、非法类型),避免脚本中断
取之后:判空 + 解析 + 容错缺一不可
localStorage.getItem() 返回的是字符串或 null,直接 JSON.parse(null) 会报错,常见写法要兼顾三件事:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 先判断返回值是否为真值(
if (!str) return defaultValue) - 再用
JSON.parse()解析,外层套try...catch捕获损坏数据或格式错误 - 解析失败时返回合理默认值,比如
[]或{},不让业务逻辑崩掉
特殊类型得手动“编解码”
原生 JSON 不支持 Date、RegExp、Map、Set 等类型,存取时需约定规则:
-
Date:存前转date.getTime()或toISOString(),读取后用new Date(str)或new Date(ms)恢复 -
RegExp:存成{ source: r.source, flags: r.flags },读取后new RegExp(obj.source, obj.flags) - 复杂结构(如含函数的对象):建议过滤掉或用自定义
replacer/reviver函数统一处理
封装成工具函数更省心
重复写 try-catch 和默认值判断容易出错,推荐封装两个基础方法:
-
setJson(key, obj):内部调用JSON.stringify并捕获异常 -
getJson(key, fallback = null):先取值、判空、再JSON.parse,失败返回 fallback
这样每次存取只需一行代码,逻辑清晰又不易漏掉容错。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










