当前位置: 首页 > news >正文

浏览器的存储机制 - Storage

浏览器的存储机制 - Storage

    • 前言
    • 一、核心概念与区别
    • 二、常用 API
      • 1、存储数据(setItem(key, value))
      • 2、 获取数据(getItem(key))
      • 3、删除单个数据(removeItem(key))
      • 4、清空所有数据(clear())
    • 5、遍历所有键(key(index) 或 Object.keys())
    • 三、使用场景
      • LocalStorage
      • SessionStorage
    • <font color=red> 四、注意事项
      • 1、数据类型限制
      • 2、安全性
      • 3、 性能与使用建议
    • 五、与 Cookie 的对比
    • 总结

前言

在前端开发中,Storage 是浏览器提供的用于在客户端存储数据的机制,包括 LocalStorageSessionStorage。它们通过 Window 对象的属性暴露,支持以**键值对**形式存储数据,适用于
不需要频繁与服务器交互 的轻量级数据存储。

位置在 F12开发者工具 ——》 Application ——》 Storage
在这里插入图片描述

一、核心概念与区别

在这里插入图片描述

二、常用 API

两者的 API 完全一致,通过 window.localStoragewindow.sessionStorage 调用。

1、存储数据(setItem(key, value))

// 存储字符串
localStorage.setItem('theme', 'dark'); // LocalStorage
sessionStorage.setItem('searchQuery', '前端'); // SessionStorage// 存储对象(需先转为JSON字符串)
const user = { id: 1, name: 'Alice' };
localStorage.setItem('user', JSON.stringify(user));

2、 获取数据(getItem(key))

const theme = localStorage.getItem('theme'); // "dark"
const searchQuery = sessionStorage.getItem('searchQuery'); // "前端"// 解析JSON对象
const user = JSON.parse(localStorage.getItem('user')); // { id: 1, name: 'Alice' }

3、删除单个数据(removeItem(key))

localStorage.removeItem('theme'); // 删除LocalStorage中的theme键
sessionStorage.removeItem('searchQuery'); // 删除SessionStorage中的searchQuery键

4、清空所有数据(clear())

localStorage.clear(); // 清空当前域名下的所有LocalStorage数据
sessionStorage.clear(); // 清空当前标签页的所有SessionStorage数据

5、遍历所有键(key(index) 或 Object.keys())

// 方法1:通过索引遍历(兼容性好)
for (let i = 0; i < localStorage.length; i++) {const key = localStorage.key(i); // 获取第i个键名const value = localStorage.getItem(key);console.log(`${key}: ${value}`);
}// 方法2:转为对象遍历(ES6+)
const storageKeys = Object.keys(localStorage);
storageKeys.forEach(key => {const value = localStorage.getItem(key);
});

三、使用场景

LocalStorage

  1. 持久化用户配置:记住用户的主题偏好、语言设置等。
  2. 缓存简单数据:缓存频繁访问但不敏感的数据(如登录令牌,需配合安全措施)。
  3. 离线功能:配合 Service Worker 实现离线应用的数据存储。

SessionStorage

  • 临时表单数据:存储用户在当前页面填写的表单数据,防止刷新页面丢失。
  • 单页应用(SPA)状态:存储当前路由的临时状态(如搜索条件),避免路由切换时数据丢失。
  • 敏感数据临时存储:存储一次性使用的敏感数据(如临时验证码),关闭页面后自动清除。

四、注意事项

1、数据类型限制

  • 仅支持存储 字符串,存储对象或数组时需通过 JSON.stringify()JSON.parse() 转换:
// 错误:直接存储对象会转为 [object Object]
localStorage.setItem('user', { name: 'Alice' }); // 正确:先序列化
localStorage.setItem('user', JSON.stringify({ name: 'Alice' }));

2、安全性

  1. 不加密存储:数据以明文存储,禁止存储敏感信息(如密码、支付信息)。
  2. 同源策略:仅同域名下的页面可访问,不同子域名也无法共享(如 a.example.com 和 b.example.com 不共享)。
  3. XSS 风险:存储的数据可能被恶意脚本读取,需避免信任不可控的输入。

3、 性能与使用建议

  1. 同步阻塞:API 为同步操作,大量数据存储可能阻塞主线程,建议分批次处理。
  2. 存储容量限制:避免存储过大数据,超出限制会抛出 QuotaExceededError 异常。
  3. 监听数据变化:可通过 storage 事件监听同一域名下其他窗口的存储变化(SessionStorage 不触发此事件):
window.addEventListener('storage', (event) => {console.log(`${event.key} 的值从 ${event.oldValue} 变为 ${event.newValue}`);
});

五、与 Cookie 的对比

在这里插入图片描述

总结

LocalStorage 和 SessionStorage 是前端轻量级存储的核心工具,适用于
非敏感数据 的持久化或临时存储。使用时需注意数据类型转换、安全性和存储容量,结合业务场景选择合适的存储方式。

相关文章:

  • NO.97十六届蓝桥杯备战|数论板块-最大公约数和最小公倍数|欧几里得算法|秦九韶算法|小红的gcd(C++)
  • 爬虫学习——Scrapy
  • Java编程语言 1.打印数组元素 2.Student类 StudentTest类
  • 【go】什么是Go语言中的GC,作用是什么?调优,sync.Pool优化,逃逸分析演示
  • alertManager部署安装、告警规则配置详解及告警消息推送
  • 华为openEuler操作系统全解析:起源、特性与生态对比
  • 机器学习模型(2/4课时):损失函数
  • 深度学习中的卷积神经网络
  • 命令行工具kubectl
  • 密码学中的盐值是什么?
  • RAII资源管理理解
  • Python 中的数据类型有哪些
  • 每日算法-250418
  • 智能化印刷新时代:Modbus 转profinet网关的完美融合,提升生产效率与环保标准
  • LangChain4j-第一篇 |几分钟完成deepseek 在线集成
  • 数据资产登记导则详解 | 企业如何规范化登记与管理数据资产?
  • ubuntu-24.04.2-live-server-arm64基于cloud-init实现分区自动扩容(LVM分区模式)
  • Selenium之 CSS 选择器详细讲解
  • 【笔记】【C++】【基础语法】作用域(scope)、持续时间(duration)和链接(linkage)
  • ChatGPT-o3辅助学术大纲效果如何?
  • 上海体彩中心2025年“五一”假期体彩销售及兑奖事宜通告
  • 人民日报:对科研不端行为加大惩处力度,让造假成本远高于收益
  • “站在亚洲实现整体振兴的新起点上”——习近平主席对越南、马来西亚、柬埔寨进行国事访问纪实
  • 揭晓!人形机器人半马完赛奖+专项奖发布
  • 一中国公民在日本滑雪场意外死亡,我领馆发布提醒
  • 对话地铁读书人|来自法学副教授的科普:读书日也是版权日