javascript本地存储怎么用_如何使用localStorage【教程】

发布时间 - 2026-01-27 00:00:00    点击率:
localStorage只能存储字符串,存对象或数组需JSON.stringify()和JSON.parse(),基本类型会隐式转为字符串,取值后需手动转换,无过期机制,容量5–10MB,敏感信息不宜单独存放。

localStorage 不是万能的,它只能存字符串,所有值都会被自动转成字符串;想存对象或数组,必须自己 JSON.stringify()JSON.parse()

怎么存和取基本数据(字符串、数字、布尔)

直接用 localStorage.setItem()localStorage.getItem() 即可,但要注意:数字、布尔值会被隐式转

成字符串,取出来时还是字符串类型,不是原始类型。

例如:

localStorage.setItem('count', 42);        // 存数字
localStorage.setItem('active', true);     // 存布尔
console.log(localStorage.getItem('count'));   // "42"(字符串)
console.log(localStorage.getItem('active'));  // "true"(字符串)
  • 如果需要保持原始类型,必须手动转换:Number(localStorage.getItem('count'))JSON.parse(localStorage.getItem('active'))
  • 不推荐依赖隐式转换,容易在条件判断中出错(比如 "false" 是真值)
  • localStorage 无过期机制,存进去就一直留着,除非手动删或用户清缓存

怎么安全地存对象或数组

不能直接 localStorage.setItem('user', {name: 'Alice'}),会变成 "[object Object]" —— 这是最常见的误用。

必须显式序列化和反序列化:

const user = { name: 'Alice', age: 30 };
localStorage.setItem('user', JSON.stringify(user)); // ✅

const saved = localStorage.getItem('user');
const parsed = saved ? JSON.parse(saved) : null; // ✅ 防空判断
  • 务必加 try...catch 包裹 JSON.parse(),否则后端改了格式或手动编辑过 localStorage 会导致脚本中断
  • 嵌套过深或含函数、undefined、Date 对象等无法被 JSON.stringify() 序列化的值,会丢失或报错
  • 如果需要存 Date,先转成 ISO 字符串:new Date().toISOString()

怎么删、清、查有没有某个键

删单个用 localStorage.removeItem(),清空用 localStorage.clear(),检查是否存在建议用 localStorage.getItem(key) !== null(而不是 inhasOwnProperty,因为它是 Storage 实例,不是普通对象)。

  • localStorage.removeItem('token') —— 删除指定键
  • localStorage.clear() —— 清掉当前域名下所有 localStorage(慎用,影响其他功能)
  • if (localStorage.getItem('theme') !== null) { ... } —— 最稳妥的存在性判断
  • 不要用 'theme' in localStorage,它返回 true 即使值是 null 或空字符串

localStorage 的边界和替代选择

单域名下容量通常为 5–10MB(Chrome 约 10MB,Safari 移动端仅 2.5MB),但写入大体积数据会阻塞主线程,且没有事件通知机制。

  • 超过几 MB 就该考虑 IndexedDB,尤其要存二进制、大量结构化数据时
  • 敏感信息(如 token)别只靠 localStorage,它不防 XSS;应配合 HttpOnly Cookie + 后端校验
  • 同源限制严格:子域名之间不共享,https://a.example.comhttps://b.example.com 互不可见
  • 私密模式下部分浏览器会禁用或重置 localStorage,首次加载可能为空

真正难的不是语法,而是什么时候不该用它——比如实时同步、多标签协同、大文件缓存,这些场景 localStorage 都撑不住。


# javascript  # java  # js  # json  # cookie  # 浏览器  # safari  # 后端  # 隐式转换  # chrome  # xss  # Object  # NULL  # if  # count  # date 


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


相关推荐: Swift中循环语句中的转移语句 break 和 continue  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  如何在Tomcat中配置并部署网站项目?  UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】  个人摄影网站制作流程,摄影爱好者都去什么网站?  EditPlus中的正则表达式实战(6)  怎样使用JSON进行数据交换_它有什么限制  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  Laravel如何生成和使用数据填充?(Seeder和Factory示例)  原生JS获取元素集合的子元素宽度实例  C++时间戳转换成日期时间的步骤和示例代码  高防服务器租用首荐平台,企业级优惠套餐快速部署  如何正确下载安装西数主机建站助手?  深入理解Android中的xmlns:tools属性  Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全  Thinkphp 中 distinct 的用法解析  Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧  javascript如何操作浏览器历史记录_怎样实现无刷新导航  如何实现javascript表单验证_正则表达式有哪些实用技巧  Laravel如何实现一对一模型关联?(Eloquent示例)  如何快速生成专业多端适配建站电话?  非常酷的网站设计制作软件,酷培ai教育官方网站?  Laravel如何实现文件上传和存储?(本地与S3配置)  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  如何彻底卸载建站之星软件?  制作电商网页,电商供应链怎么做?  Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性  如何构建满足综合性能需求的优质建站方案?  想要更高端的建设网站,这些原则一定要坚持!  如何快速上传建站程序避免常见错误?  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  如何快速搭建自助建站会员专属系统?  Laravel Fortify是什么,和Jetstream有什么关系  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  如何在阿里云ECS服务器部署织梦CMS网站?  如何在IIS服务器上快速部署高效网站?  如何确保西部建站助手FTP传输的安全性?  如何快速查询网址的建站时间与历史轨迹?  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  微信小程序 配置文件详细介绍  如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框  Laravel怎么实现支付功能_Laravel集成支付宝微信支付  Laravel如何与Pusher实现实时通信?(WebSocket示例)  佛山网站制作系统,佛山企业变更地址网上办理步骤?  Laravel观察者模式如何使用_Laravel Model Observer配置  Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】  浅谈redis在项目中的应用  如何在香港免费服务器上快速搭建网站?  Laravel怎么清理缓存_Laravel optimize clear命令详解