javascript本地存储是什么_localStorage和sessionStorage如何选择?
发布时间 - 2026-01-09 00:00:00 点击率:次localStorage用于长期存储同源数据(5–10MB),需序列化;sessionStorage仅限当前标签页,刷新保留、关闭清空;二者API相同但数据隔离,支持storage事件跨窗口通信。
本地存储就是浏览器给你留的两个小抽屉,localStorage 是长期保存的抽屉,关掉页面甚至重启电脑都还在;sessionStorage 是临时抽屉,只在当前标签页生命周期内有效,关掉标签就清空。
什么时候该用 localStorage?
适合存那些「用户明确希望下次打开还能看到」的数据,比如:主题偏好、折叠面板状态、搜索历史、已登录用户的 token(注意:敏感 token 更推荐配合后端短期刷新机制,别只靠它)。
关键限制要注意:
-
localStorage的数据是**同源(协议+域名+端口)隔离**的,https://a.com和http://a.com互不可见 - 容量通常为 5–10 MB,但不同浏览器有差异,别指望存大文件或大量 JSON
- 所有操作都是同步阻塞的,频繁写入大对象可能卡住主线程
- 不支持直接存对象,必须用
JSON.stringify()序列化,读取时用JSON.parse()
什么时候该用 sessionStorage?
适合存「只在这一次浏览中需要延续」的状态,比如:表单草稿、多步流程的中间数据、临时筛选条件、未提交的购物车(仅限当前会话)。
特别注意它的边界:
- 新开一个标签页或窗口,哪怕 URL 完全一样,
sessionStorage也是全新的,彼此不共享 - 页面刷新、前进后退都保留,只有关闭标签页或调用
sessionStorage.clear()才会丢 - 和
localStorage一样不支持直接存对象,也要手动序列化/反序列化
localStorage 和 sessionStorage 的 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生成函数详解

