javascript的localStorage与sessionStorage怎样使用?【教程】
发布时间 - 2026-01-30 00:00:00 点击率:次localStorage和sessionStorage都只能存字符串,存对象必须JSON.stringify()、取时JSON.parse()并加try/catch;区别在于localStorage同源永久共享,sessionStorage仅当前tab有效且关闭即清空。
localStorage 和 sessionStorage 不是“用不用”的问题,而是“该用哪个、怎么存才不会出错”的问题。它们都只能存字符串,存对象不序列化会变成 [object Object],取出来直接 undefined 是最常见的翻车现场。
存数据前必须 JSON.stringify()
直接 localStorage.setItem('user', {name: 'Alice'}) 看似没报错,但实际存进去的是 [object Object] 字符串,后续 JSON.parse() 会 SyntaxError。正确做法:
- 存对象:先
JSON.stringify(),再setItem() - 取对象:先
getItem(),再JSON.parse(),且必须加try/catch—— 因为别人可能手动删改过值,或存了非法 JSON - 存数字/布尔值也建议统一走
stringify,避免类型隐式转换陷阱(比如localStorage.setItem('count', 0)存的是字符串"0",取出来
再
++就变成"01")
localStorage 与 sessionStorage 的关键区别
区别不在 API,而在生命周期和作用域:
-
localStorage:同源下永久存在,关浏览器、重启电脑都不丢;所有同源 tab 共享同一份数据 -
sessionStorage:仅当前 tab 有效,关闭 tab 即清空;即使同源,新开 tab 的sessionStorage是隔离的 - 两者都受同源策略限制:
https://a.com和https://b.com互不可见;http和https也算不同源
读取时必须处理 null 和解析失败
getItem() 找不到键时返回 null,不是 undefined,直接 JSON.parse(null) 会抛 SyntaxError。安全读取模式:
function getFromStorage(key) {
const raw = localStorage.getItem(key);
if (!raw) return null;
try {
return JSON.parse(raw);
} catch (e) {
console.warn(`Invalid JSON in localStorage key "${key}"`);
return null;
}
}
别省略 try/catch —— 用户用开发者工具乱改、插件干扰、跨域写入失败残留垃圾值,都很常见。
注意存储上限和性能边界
大多数浏览器给每个源分配约 5–10MB localStorage 空间,但它是同步阻塞 API,大体积数据(如 >1MB)读写会卡主线程。实际使用中:
- 避免存日志、原始图片 base64、未压缩的数组列表
- 高频更新场景(如打字实时存草稿)用
debounce控制写入频率,否则频繁setItem可能触发性能告警 -
sessionStorage虽然自动清理,但大体积数据仍会拖慢 tab 启动速度,尤其在低端设备上
真正容易被忽略的点是:它们都只支持字符串,且没有内置的过期机制 —— 想实现“7天后自动失效”,得自己存时间戳并每次读取时判断,不能依赖 storage 本身。
# javascript
# java
# js
# json
# 浏览器
# 电脑
# 工具
# session
# 跨域
# 区别
# 作用域
# Object
# NULL
# count
# try
# catch
# 字符串
# 线程
# 主线程
# undefined
# 对象
# http
# https
# 的是
# 清空
# 都不
# 找不到
# 而在
# 它是
# 都很
# 新开
# 也算
# 报错
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】
Laravel如何实现密码重置功能_Laravel密码找回与重置流程
如何做网站制作流程,*游戏网站怎么搭建?
Laravel怎么自定义错误页面_Laravel修改404和500页面模板
如何为不同团队 ID 动态生成多个独立按钮
如何使用 jQuery 正确渲染 Instagram 风格的标签列表
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】
Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】
ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】
HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】
Linux系统命令中tree命令详解
网站优化排名时,需要考虑哪些问题呢?
如何在建站宝盒中设置产品搜索功能?
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
Bootstrap CSS布局之列表
Laravel安装步骤详细教程_Laravel环境搭建指南
宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法
Windows Hello人脸识别突然无法使用
企业网站制作这些问题要关注
如何用虚拟主机快速搭建网站?详细步骤解析
Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理
JavaScript如何实现路由_前端路由原理是什么
如何快速建站并高效导出源代码?
微信小程序 require机制详解及实例代码
Laravel怎么为数据库表字段添加索引以优化查询
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】
Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】
Mybatis 中的insertOrUpdate操作
智能起名网站制作软件有哪些,制作logo的软件?
Python文件操作最佳实践_稳定性说明【指导】
MySQL查询结果复制到新表的方法(更新、插入)
Laravel如何创建自定义Artisan命令?(代码示例)
如何破解联通资金短缺导致的基站建设难题?
Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能
微信h5制作网站有哪些,免费微信H5页面制作工具?
jquery插件bootstrapValidator表单验证详解
Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧
Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】
Claude怎样写约束型提示词_Claude约束提示词写法【教程】
Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用
Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程
如何在不使用负向后查找的情况下匹配特定条件前的换行符
Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)


