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

JavaScript 存储对象 sessionStorage (会话存储) 和 localStorage(本地存储)

深入理解 localStorage

localStorage 是浏览器提供的一种客户端存储机制,用于在用户浏览器中存储键值对数据。与 cookie 相比,它提供了更大的存储容量(通常为 5-10MB),并且不会随 HTTP 请求发送到服务器,因此更适合存储应用程序不需要与服务器共享的数据。

核心特性

  1. 持久性

    • 数据不会过期,除非手动删除
    • 关闭浏览器或标签页后数据仍然保留
  2. 域隔离

    • 每个域名有独立的 localStorage
    • 不同域名之间无法互相访问
  3. 存储限制

    • 大多数浏览器限制为 5-10MB(以字符串长度计算)
    • 超出限制会抛出 QuotaExceededError
  4. 数据类型

    • 只能存储字符串
    • 对象和数组需要使用 JSON.stringify 和 JSON.parse 进行转换

基本操作

存储数据
localStorage.setItem('key', 'value');// 存储对象示例
const user = { name: 'John', age: 30 };
localStorage.setItem('user', JSON.stringify(user));
获取数据 
const value = localStorage.getItem('key');// 获取对象示例
const user = JSON.parse(localStorage.getItem('user'));
console.log(user.name); // 输出: "John"
删除数据
// 删除单个项
localStorage.removeItem('key');// 清空所有项
localStorage.clear();
遍历所有项
for (let i = 0; i < localStorage.length; i++) {const key = localStorage.key(i);const value = localStorage.getItem(key);console.log(`${key}: ${value}`);
}

实际应用场景

1.记住用户偏好:
// 保存主题选择
const saveTheme = (theme) => {localStorage.setItem('appTheme', theme);
};// 获取主题选择
const getTheme = () => {return localStorage.getItem('appTheme') || 'light';
};
2. 缓存 API 响应
 
const fetchData = async (url) => {const cached = localStorage.getItem(url);if (cached) {return JSON.parse(cached);}const response = await fetch(url);const data = await response.json();localStorage.setItem(url, JSON.stringify(data));return data;
};
3.会话管理
// 登录时存储令牌
const login = (token) => {localStorage.setItem('authToken', token);
};// 检查是否已登录
const isLoggedIn = () => {return !!localStorage.getItem('authToken');
};
4.离线应用
// 保存表单数据,防止意外丢失
const saveFormData = (formData) => {localStorage.setItem('formDraft', JSON.stringify(formData));
};// 恢复表单数据
const restoreFormData = () => {return JSON.parse(localStorage.getItem('formDraft'));
};

注意事项与最佳实践

  1. 错误处理
    • 存储数据时可能会超出容量限制
    • 某些浏览器隐私模式下 localStorage 可能不可用
const safeSetItem = (key, value) => {try {localStorage.setItem(key, value);} catch (e) {console.error('LocalStorage error:', e);// 可以实现降级策略,如使用内存缓存}
};

 

  1. 性能考虑
    • 避免存储大量数据或频繁读写
    • localStorage 操作是同步的,可能阻塞主线程

  1. 数据安全
    • 数据以明文形式存储,容易被脚本读取
    • 不要存储敏感信息(如密码、信用卡号)
http://www.lqws.cn/news/508969.html

相关文章:

  • 正点原子——直流无刷电机-霍尔传感基本实现流程
  • WEB安全--Java安全--jsp webshell免杀1
  • leetcode114-二叉树展开为链表
  • 人机交互动画制作新突破!文本驱动扩散框架HOIDiNi:一句话驱动虚拟人高精度操作物体。
  • 美团小程序闪购 mtgsig1.2
  • 关于 Babel 编译后的 Generator 状态机结构解析
  • 读取ILA数据进行MATLAB分析
  • 软件行业如何权衡“统一规范“与“灵活创新“?
  • Vue.js 列表过滤实现详解(watch和computed实现)
  • PYTHON从入门到实践4-数据类型
  • 原子操作(CAS)
  • OSS跨区域复制灾备方案:华东1到华南1的数据同步与故障切换演练
  • 嵌入式开发学习日志Day8(ARM体系架构——按键、蜂鸣器及中断)
  • 【bug】searchxng搜索报错Searx API returned an error
  • Vue项目使用defer优化页面白屏,性能优化提升,秒加载!!!
  • java-SpringBoot框架开发计算器网页端编程练习项目【web版】
  • QT多线程
  • Git 子模块 (Submodule) 完全使用指南
  • 烟花爆竹生产企业库房存储安全风险预警系统
  • 【Pandas】pandas DataFrame update
  • 【Docker基础】Docker容器管理:docker stop详解
  • Vue.js:渐进式框架赋能现代Web开发
  • 蓝桥杯嵌入式学习(cubemxkeil5)
  • word中如何快速打出上标?
  • 20250624java面试总结
  • 第九节 CSS工程化-预处理技术对比
  • 大白话蓝牙中的RPC:Remote Procedure Call远程过程调用
  • 壁挂马桶品牌推荐:我的“瑞尔特瑞家HX5”沉浸式体验报告健康与洁净的硬核科技
  • 从设备自动化到智能管控:MES如何赋能牛奶饮料行业高效生产?
  • 2025年渗透测试面试题总结-2025年HW(护网面试) 10(题目+回答)