localStorage仅支持字符串类型数据,对象必须先用JSON.stringify转换为字符串再存储;读取时务必先判空,再用JSON.parse解析,否则容易报错。按origin隔离,file://协议下不可用。谨慎使用clear(),推荐使用removeItem()逐个删除。注意隐私模式可能存在限制,且存储上限为5MB,使用前需检查浏览器兼容性。
先说几个核心判断:localStorage 并非“存进去就能直接用”那么简单。它只认字符串,存储对象若不做序列化等于白存;读取时不判空、不解析,必然报错。更不用说作用域隔离、隐私模式下的坑——不提前摸清,上线后迟早要踩雷。

长期稳定更新的攒劲资源: >>>点此立即查看<<<
直接写 localStorage.setItem('user', {name: 'Alice'}),看起来没报错?实际存进去的是 "[object Object]"——后续你试图用 JSON.parse() 解析,浏览器会直接抛出 SyntaxError。这个坑很多新手甚至老手都踩过。
localStorage.setItem('user', JSON.stringify({name: 'Alice', age: 28}))Date、RegExp、函数、undefined 这些类型,JSON.stringify() 无法正常处理。比如 new Date(),需先手动转为 toISOString(){a: {}}; a.b = a),序列化时会直接抛出 TypeError: Converting circular structure to JSON。解决办法要么提前剥离循环引用,要么传入自定义 replacergetItem() 找不到键时返回 null,不是 undefined,更不是空字符串。而 JSON.parse(null) 的结果,说炸就炸。
const userStr = localStorage.getItem('user'); const user = userStr JSON.parse(userStr) : null;try...catch——用户可能手动篡改 localStorage 的值,导致 JSON 格式损坏getItem() 返回的都是 nulllocalStorage 按完整 origin(协议 + 域名 + 端口)隔离。这意味着:
http://localhost:3000 和 http://localhost:3001 是两个完全独立的存储空间,互不相通https://example.com 和 http://example.com 之间也互相不可见file:/// 协议,Chrome、Edge 等现代浏览器默认会禁用 localStorage,直接抛 SecurityErrorpython3 -m http.server 8000,或者用 Vite / Webpack Dev ServerlocalStorage.clear() 就像一颗“核按钮”——它会删除当前 origin 下所有键,操作不可逆,而且不会通知其他标签页发生了什么。必须警惕的是,上线代码里绝不允许出现 localStorage.clear(),除非是用户明确主动触发的“重置所有设置”操作。
localStorage.removeItem('theme')['cart', 'searchHistory'].forEach(k => localStorage.removeItem(k))Object.keys(localStorage).filter(k => !['token', 'userId'].includes(k)).forEach(k => localStorage.removeItem(k))真正容易被忽视的不是语法本身,而是那些边界情况:用户在无痕模式下可能根本没开 storage;5MB 限制不是按字符数算的,中文、emoji、Base64 都占得多;storage 事件不会在当前页面触发……这些细节不提前踩一遍,上线后出问题,排查起来可没那么轻松。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述