localstorage存取json对象必须用json.stringify()序列化后存储、json.parse()解析后读取,并用try-catch处理错误;函数、undefined、date等特殊类型需手动编解码。

JavaScript 中的 LocalStorage 只接受字符串作为值,所以任何非字符串类型(对象、数组、数字、布尔值、null 等)都必须先转成字符串才能存入;读取时再还原。核心就两点:存前 JSON.stringify(),取后 JSON.parse(),并始终用 try-catch 拦住潜在错误。
哪些数据能直接序列化?哪些会出问题?
JSON 标准只支持有限的数据类型。以下可安全序列化:
- 普通对象(不含函数、undefined、Symbol)
- 数组、字符串、数字、布尔值、null
- 嵌套结构(如对象里含数组,数组里含对象)
以下无法被 JSON 正确序列化,强行调用会丢数据或报错:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 函数(会被忽略)
- undefined(在对象中会被删掉,数组中变成 null)
- Date 实例(变成 ISO 字符串,但不再是 Date 对象)
- RegExp、Map、Set、BigInt、循环引用对象
正确存取对象/数组的写法
不要跳过转换步骤,也不要用 localStorage.user = obj 这类赋值语法(它会隐式调用 .toString(),结果是 [object Object])。
- 存储:先
JSON.stringify(obj),再setItem - 读取:先
getItem,拿到字符串后立刻JSON.parse() - 加
try-catch——序列化失败(如循环引用)或解析失败(如手动改了 localStorage 值)都会抛错 - 读取时建议提供默认值,比如
JSON.parse(localStorage.getItem('list') || '[]')
处理特殊类型的小技巧
如果必须存 Date、RegExp 或带方法的对象,得自己编解码:
- 存 Date:转成时间戳或 ISO 字符串,读取后再 new Date()
- 存正则:用
regex.toString()存,读取后用new RegExp(str)构造 - 更复杂场景(如类实例),可定义
toJSON()方法控制序列化行为
别忘了容量和兼容性底线
LocalStorage 单域名上限约 5MB,超限会抛 QuotaExceededError;IE8+ 和所有现代浏览器都支持。不依赖自动过期,也不跨标签页实时同步——这些都得靠代码自己补全。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










