javascript本地存储是什么_localStorage和sessionStorage如何选择?

发布时间 - 2026-01-09 00:00:00    点击率:
localStorage用于长期存储同源数据(5–10MB),需序列化;sessionStorage仅限当前标签页,刷新保留、关闭清空;二者API相同但数据隔离,支持storage事件跨窗口通信。

本地存储就是浏览器给你留的两个小抽屉,localStorage 是长期保存的抽屉,关掉页面甚至重启电脑都还在;sessionStorage 是临时抽屉,只在当前标签页生命周期内有效,关掉标签就清空。

什么时候该用 localStorage

适合存那些「用户明确希望下次打开还能看到」的数据,比如:主题偏好、折叠面板状态、搜索历史、已登录用户的 token(注意:敏感 token 更推荐配合后端短期刷新机制,别只靠它)。

关键限制要注意:

  • localStorage 的数据是**同源(协议+域名+端口)隔离**的,https://a.comhttp://a.com 互不可见
  • 容量通常为 5–10 MB,但不同浏览器有差异,别指望存大文件或大量 JSON
  • 所有操作都是同步阻塞的,频繁写入大对象可能卡住主线程
  • 不支持直接存对象,必须用 JSON.stringify() 序列化,读取时用 JSON.parse()

什么时候该用 sessionStorage

适合存「只在这一次浏览中需要延续」的状态,比如:表单草稿、多步流程的中间数据、临时筛选条件、未提交的购物车(仅限当前会话)。

特别注意它的边界:

  • 新开一个标签页或窗口,哪怕 URL 完全一样,sessionStorage 也是全新的,彼此不共享
  • 页面刷新、前进后退都保留,只有关闭标签页或调用 sessionStorage.clear() 才会丢
  • localStorage 一样不支持直接存对象,也要手动序列化/反序列化

localStoragesessionStorage 的 API 完全一致,但数据不互通

它们都提供 setItem()getItem()removeItem()clear() 这四个方法,用法一模一样。但你往 localStorage 存的东西,在 sessionStorage 里绝对 getItem() 不出来,反之亦然——它们是两套独立的键值空间。

例如:

localStorage.setItem('user', JSON.stringify({ id: 123, name: 'Alice' }));
sessionStorage.setItem('tempSearch', 'react hooks');

console.log(localStorage.getItem('tempSearch')); // null
console.log(sessionStorage.getItem('user'));     // null

别忽略监听变化和清理时机

两个存储都支持 storage 事件,但它**只在其他同源窗口触发变更时才通知当前窗口**,自己改的不会触发自己监听。所以不能靠它做「本窗口数据更新反馈」,更适合跨标签通信(比如 A 标签登出,B 标签收到事件自动跳转)。

清理方面容易被忽略的点:

  • 没手动 removeItem()clear() 的数据会一直占着位置,尤其 localStorage 可能越积越多
  • 用户手动清除浏览器缓存时,这两个存储默认也会被清掉(取决于用户勾选了哪些选项)
  • 如果存的是过期 token 或旧版本结构数据,应用启动时最好加一层校验逻辑,避免 JSON.parse() 报错或读出脏数据


# react  # javascript  # java  # js  # json  # 浏览器  # 电脑  # 端口  # session  # 后端 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: LinuxShell函数封装方法_脚本复用设计思路【教程】  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  如何用低价快速搭建高质量网站?  Laravel如何实现用户密码重置功能?(完整流程代码)  Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧  中国移动官方网站首页入口 中国移动官网网页登录  如何用y主机助手快速搭建网站?  如何在香港服务器上快速搭建免备案网站?  如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环  Laravel如何操作JSON类型的数据库字段?(Eloquent示例)  瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口  Laravel如何配置Horizon来管理队列?(安装和使用)  Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程  Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作  html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】  实现点击下箭头变上箭头来回切换的两种方法【推荐】  php485函数参数是什么意思_php485各参数详细说明【介绍】  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  香港网站服务器数量如何影响SEO优化效果?  ,交易猫的商品怎么发布到网站上去?  Laravel Session怎么存储_Laravel Session驱动配置详解  企业网站制作这些问题要关注  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程  Python文件异常处理策略_健壮性说明【指导】  如何在局域网内绑定自建网站域名?  javascript基本数据类型及类型检测常用方法小结  Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解  EditPlus中的正则表达式 实战(4)  Laravel如何实现API速率限制?(Rate Limiting教程)  Claude怎样写约束型提示词_Claude约束提示词写法【教程】  zabbix利用python脚本发送报警邮件的方法  Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议  魔毅自助建站系统:模板定制与SEO优化一键生成指南  如何获取免费开源的自助建站系统源码?  如何在Windows虚拟主机上快速搭建网站?  Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理  如何在云主机快速搭建网站站点?  Laravel怎么上传文件_Laravel图片上传及存储配置  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门  php在windows下怎么调试_phpwindows环境调试操作说明【操作】  Laravel PHP版本要求一览_Laravel各版本环境要求对照  laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法  Android GridView 滑动条设置一直显示状态(推荐)  浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】  如何自定义建站之星网站的导航菜单样式?  HTML 中动态设置元素 name 属性的正确语法详解  如何快速重置建站主机并恢复默认配置?  Laravel怎么生成URL_Laravel路由命名与URL生成函数详解