javascript如何操作浏览器的本地存储?_localStorage和sessionStorage有何区别?【教程】

发布时间 - 2026-01-25 00:00:00    点击率:
localStorage需手动序列化/反序列化对象,用JSON.stringify()存、JSON.parse()取并捕获SyntaxError;sessionStorage仅当前标签页有效,关闭即销毁;二者均不参与HTTP请求,localStorage同源共享且持久,sessionStorage隔离且临时。

localStorage 和 sessionStorage 都能存字符串,但生命周期、作用域和用途完全不同——别用错,否则数据会莫名其妙消失或跨标签泄露。

怎么安全地存取 localStorage?

localStorage 只接受字符串,直接存对象会变成 [object Object];必须手动序列化和反序列化。

  • 存:用 JSON.stringify() 转对象为

    字符串,再传给 localStorage.setItem()
  • 取:先用 localStorage.getItem() 拿字符串,再用 JSON.parse() 还原(注意捕获 SyntaxError
  • 删单个:用 localStorage.removeItem();清空全部:用 localStorage.clear()
localStorage.setItem('user', JSON.stringify({id: 123, name: 'Alice'}));
const user = JSON.parse(localStorage.getItem('user') || '{}');

sessionStorage 和 localStorage 的关键区别在哪?

两者 API 完全一致,但行为差异直接影响功能设计:

  • localStorage:数据永久保存(除非手动清除),同源下所有标签页、窗口共享
  • sessionStorage:仅当前标签页有效,关闭该标签页即销毁;即使同源,新开标签页也拿不到之前的数据
  • 二者都不参与 HTTP 请求,不被服务端读取,也不随请求自动发送

比如表单草稿适合用 sessionStorage(关掉页面就丢,不污染长期存储);用户偏好设置更适合 localStorage

为什么有时 getItems 返回 null 或解析失败?

常见原因不是 API 写错,而是环境或操作问题:

  • 在无痕模式或某些浏览器隐私设置下,localStorage 可能被禁用,调用会抛 SecurityError —— 必须加 try/catch
  • 存入值超过浏览器限额(通常 5–10MB),setItem() 会静默失败或抛 QuotaExceededError
  • getItem() 找不到键时返回 null,不是空字符串,直接 JSON.parse(null) 会报错
  • 不同协议(http vs https)、子域名(a.example.com vs b.example.com)视为不同源,无法共享

localStorage 能监听变化吗?

可以,但只在「其他标签页」修改时触发本页的 storage 事件,当前页改自己不会触发。

  • 监听用 window.addEventListener('storage', handler)
  • 回调里能拿到 event.keyevent.oldValueevent.newValueevent.url
  • 注意:Safari 在无痕模式下不触发该事件;且事件不会告诉你哪个标签页改的,只通知“有变化”

这个机制适合做跨标签页状态同步(如登录态刷新),但别指望它替代状态管理库。

真正容易被忽略的是:localStorage 是阻塞式同步 API,大量读写会卡主线程;如果存的是大对象或频繁操作,得考虑防抖、分片或换用 IndexedDB。


# javascript  # java  # js  # json  # 浏览器  # session  # safari  # win  # 区别  # 作用域 


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


相关推荐: 如何将凡科建站内容保存为本地文件?  如何快速上传自定义模板至建站之星?  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  javascript中对象的定义、使用以及对象和原型链操作小结  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  高端建站如何打造兼具美学与转化的品牌官网?  香港服务器租用每月最低只需15元?  如何在搬瓦工VPS快速搭建网站?  如何快速上传建站程序避免常见错误?  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  图册素材网站设计制作软件,图册的导出方式有几种?  实例解析angularjs的filter过滤器  Python高阶函数应用_函数作为参数说明【指导】  微信小程序 input输入框控件详解及实例(多种示例)  Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】  如何在景安服务器上快速搭建个人网站?  Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门  Laravel如何使用Livewire构建动态组件?(入门代码)  Laravel如何处理CORS跨域请求?(配置示例)  如何在宝塔面板中创建新站点?  详解MySQL数据库的安装与密码配置  如何在阿里云ECS服务器部署织梦CMS网站?  LinuxCD持续部署教程_自动发布与回滚机制  如何快速登录WAP自助建站平台?  Python制作简易注册登录系统  HTML 中如何正确使用模板变量为元素的 name 属性赋值  如何做网站制作流程,*游戏网站怎么搭建?  如何续费美橙建站之星域名及服务?  如何在阿里云购买域名并搭建网站?  ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集  详解Android图表 MPAndroidChart折线图  香港服务器网站卡顿?如何解决网络延迟与负载问题?  Android自定义listview布局实现上拉加载下拉刷新功能  高性价比服务器租赁——企业级配置与24小时运维服务  node.js报错:Cannot find module 'ejs'的解决办法  微信小程序 require机制详解及实例代码  iOS UIView常见属性方法小结  Laravel如何编写单元测试和功能测试?(PHPUnit示例)  Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转  Claude怎样写约束型提示词_Claude约束提示词写法【教程】  Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】  php485函数参数是什么意思_php485各参数详细说明【介绍】  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】  浅谈Javascript中的Label语句  Swift开发中switch语句值绑定模式  个人摄影网站制作流程,摄影爱好者都去什么网站?  文字头像制作网站推荐软件,醒图能自动配文字吗?  如何快速搭建高效WAP手机网站吸引移动用户?  PHP 500报错的快速解决方法