localStorage数据永久保存需手动清除,sessionStorage仅限当前标签页会话,关闭即清空;前者跨标签页共享,后者完全隔离。

localStorage 和 sessionStorage 的生命周期差异
最直接的区别是数据存留时间:localStorage 中的数据只要不被手动清除(代码调用 clear() 或用户清缓存),就一直存在;sessionStorage 中的数据只绑定到当前标签页的会话,关掉该标签页即丢失——哪怕刷新页面、前进后退、甚至崩溃恢复,数据都还在;但换一个标签页打开同一网址,sessionStorage 就是全新的空对象。
同域名下多个标签页能否共享数据
不能混用:同一域名下,localStorage 是跨标签页共享的,A 标签页写入 localStorage.setItem('theme', 'dark'),B 标签页立刻能 getItem('theme') 读到;而 sessionStorage 完全隔离,每个标签页拥有独立副本,互不可见。
适用场景怎么选:表单草稿 vs 用户偏好
选错会导致体验断裂或隐私泄露:
- 表单中途关闭又回来继续填?用
sessionStorage——关掉标签页就丢,符合用户预期 - 记住用户选的深色模式、语言、默认收货地址?用
localStorage——需要跨会话、跨标签页生效 - 敏感信息(如 token)别直接塞进去:两者都可被 XSS 读取,且
localStorage还可能意外同步到其他设备(如开启浏览器同步功能时)
API 行为一致但底层完全独立
setItem、getItem、removeItem、clear 这四个方法名和用法一模一样,但它们操作的是两个完全不同的存储空间。你不能用 sessionStorage.getItem('x') 去读 localStorage 里存的 'x',反之亦然。即使键名相同,值也毫无关系。
立即学习“前端免费学习笔记(深入)”;
容易被忽略的一点:两者都只支持字符串值。存对象必须 JSON.stringify(),取的时候要 JSON.parse();存 null 或 undefined 会被自动转成字符串 "null" 或 "undefined",不是真的空值。


















