javascript如何操作浏览器存储?【教程】
发布时间 - 2026-01-23 00:00:00 点击率:次localStorage和sessionStorage仅支持字符串值,存对象需JSON.stringify()编码、取时用JSON.parse()解码;二者区别在于生命周期(持久化vs标签页级)和作用域(同源共享vs单页隔离);读写应封装容错逻辑并注意JSON局限性与环境限制。
JavaScript 操作浏览器存储,核心就两条路:localStorage 和 sessionStorage,它们够用、兼容好、不用额外依赖。但直接塞对象或函数会出错,读写前必须处理类型。
为什么 localStorage.setItem() 存不了对象?
因为 localStorage 只接受字符串作为值。传入对象(比如 {name: "Alice"})时,它会自动调用 .toString(),结果变成 "[object Object]",数据彻底丢失。
- 正确做法:存之前用
JSON.stringify()编码 - 取出来后必须用
JSON.parse()解码,否则拿到的是字符串而非原始结构 - 如果值是
null、undefined或函数,JSON.stringify()会忽略或转成null,这类值无法可靠存储
localStorage 和 sessionStorage 到底怎么选?
区别不在“本地”还是“会话”,而在于生命周期和作用域:
-
localStorage:关闭标签页不丢,除非手动清除或代码调用localStorage.clear();同源(协议+域名+端口)下所有窗口共享 -
sessionStorage:仅当前标签页有效,关掉该页即清空;即使同源,新开的标签页也拿不到原页存的数据 - 两者 API 完全一致(
setItem/getItem/removeIt/
em
clear),替换使用几乎零成本
如何安全地读写带默认值的存储项?
直接调用 localStorage.getItem("key") 返回可能是 null,不判空就 JSON.parse(null) 会报错:Unexpected token 'n' in JSON at position 0。
- 推荐封装一个读取函数,自动处理
null和解析失败:
function getStorage(key, defaultValue = null) {
const raw = localStorage.getItem(key);
if (raw == null) return defaultValue;
try {
return JSON.parse(raw);
} catch {
return defaultValue;
}
}
- 写入时也建议加
try/catch,因为用户可能禁用存储、或超出 5MB 限额(不同浏览器略有差异),此时setItem会抛QuotaExceededError
真正容易被忽略的不是语法,而是边界情况:JSON 不支持 Date、RegExp、undefined、循环引用;跨域 iframe 无法访问父页的 localStorage;私密模式下部分浏览器会限制写入权限。这些不会立刻报错,但会在特定环境里静默失效。
# javascript
# java
# js
# json
# 编码
# 浏览器
# 端口
# session
# 跨域
# 区别
# 作用域
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
EditPlus中的正则表达式 实战(1)
php结合redis实现高并发下的抢购、秒杀功能的实例
Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程
如何在云主机快速搭建网站站点?
如何快速生成凡客建站的专业级图册?
百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏
Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载
如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】
高端建站如何打造兼具美学与转化的品牌官网?
如何在宝塔面板中修改默认建站目录?
网站建设整体流程解析,建站其实很容易!
Laravel如何优化应用性能?(缓存和优化命令)
php静态变量怎么调试_php静态变量作用域调试技巧【解答】
php json中文编码为null的解决办法
如何挑选优质建站一级代理提升网站排名?
Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲
nodejs redis 发布订阅机制封装实现方法及实例代码
个人网站制作流程图片大全,个人网站如何注销?
Laravel怎么发送邮件_Laravel Mail类SMTP配置教程
Laravel中间件如何使用_Laravel自定义中间件实现权限控制
HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】
手机软键盘弹出时影响布局的解决方法
如何在Tomcat中配置并部署网站项目?
Laravel事件监听器怎么写_Laravel Event和Listener使用教程
zabbix利用python脚本发送报警邮件的方法
如何利用DOS批处理实现定时关机操作详解
文字头像制作网站推荐软件,醒图能自动配文字吗?
香港服务器建站指南:免备案优势与SEO优化技巧全解析
PHP正则匹配日期和时间(时间戳转换)的实例代码
如何用虚拟主机快速搭建网站?详细步骤解析
如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环
打造顶配客厅影院,这份100寸电视推荐名单请查收
jQuery中的100个技巧汇总
Laravel怎么在Blade中安全地输出原始HTML内容
Laravel怎么实现验证码(Captcha)功能
如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】
Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】
微信h5制作网站有哪些,免费微信H5页面制作工具?
Python正则表达式进阶教程_复杂匹配与分组替换解析
消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工
Angular 表单中正确绑定输入值以确保提交与验证正常工作
千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】
如何基于PHP生成高效IDC网络公司建站源码?
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析
HTML 中动态设置元素 name 属性的正确语法详解
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
大连 网站制作,大连天途有线官网?
南京网站制作费用,南京远驱官方网站?
iOS验证手机号的正则表达式


