JavaScript 本地存储 (localStorage) 完全指南
文章目录
- JavaScript 本地存储 (localStorage) 完全指南 🔐
- 一、什么是 `localStorage`?💡
- 二、如何使用 `localStorage`?🔧
- 1. 存储数据
- 2. 读取数据
- 3. 删除数据
- 4. 清空所有数据
- 三、存储对象和数组的技巧 🎨
- 1. 存储对象
- 2. 读取对象
- 3. 存储数组
- 4. 读取数组
- 四、`localStorage` 的常见应用场景 🌟
- 1. 保存用户设置或偏好
- 2. 记住用户登录状态
- 3. 保存购物车内容
- 五、`localStorage` 的限制和注意事项 ⚠️
- 六、总结:轻松管理浏览器存储 🔄
JavaScript 本地存储 (localStorage) 完全指南 🔐
在现代网页应用中,本地存储(localStorage
)是一个非常有用的 Web API,它允许我们在用户的浏览器中存储数据,以便跨页面访问,并且数据会在浏览器会话结束后依然保持。这使得它成为在客户端存储和读取数据的理想选择,比如保存用户偏好、购物车内容或者应用状态等。
今天,我们将详细探讨如何使用 localStorage
来存储和管理数据,了解它的工作原理以及常见的使用场景。
一、什么是 localStorage
?💡
localStorage
是 Web 存储的一部分,它允许我们将数据以键值对的形式保存在浏览器中。与 sessionStorage
不同,localStorage
存储的数据没有过期时间,它会一直保留,直到用户主动删除或浏览器清除数据为止。
- 永久存储:数据存储在浏览器中,直到被显式删除。
- 跨页面共享:同一源下(相同的协议、域名和端口),不同页面可以共享
localStorage
中存储的数据。 - 同一浏览器有效:数据在同一浏览器窗口中可用,但跨浏览器不可共享。
二、如何使用 localStorage
?🔧
localStorage
提供了简洁的 API 来进行数据存取。它支持以下几种常用操作:
- 存储数据:通过
localStorage.setItem()
方法来存储数据。 - 读取数据:通过
localStorage.getItem()
方法来读取数据。 - 删除数据:通过
localStorage.removeItem()
删除某个存储的项。 - 清除所有数据:通过
localStorage.clear()
清空所有存储的数据。
1. 存储数据
我们可以使用 localStorage.setItem(key, value)
来存储数据,其中 key
是存储项的名称(字符串类型),value
是数据的值(也必须是字符串类型)。
// 存储用户名
localStorage.setItem('username', 'Alice');
2. 读取数据
要从 localStorage
中读取存储的数据,可以使用 localStorage.getItem(key)
。如果键不存在,返回 null
。
// 读取用户名
let username = localStorage.getItem('username');
console.log(username); // 输出: Alice
3. 删除数据
要删除存储在 localStorage
中的某项数据,可以使用 localStorage.removeItem(key)
。
// 删除用户名
localStorage.removeItem('username');
4. 清空所有数据
如果我们希望清空 localStorage
中的所有数据,可以使用 localStorage.clear()
。
// 清空所有数据
localStorage.clear();
三、存储对象和数组的技巧 🎨
localStorage
只能存储字符串类型的数据,但我们可以通过 JSON 来存储对象或数组。使用 JSON.stringify()
将对象或数组转化为字符串存储,使用 JSON.parse()
将字符串转化为对象或数组读取。
1. 存储对象
// 创建一个对象
let user = {name: 'Alice',age: 25
};// 将对象转为 JSON 字符串并存储
localStorage.setItem('user', JSON.stringify(user));
2. 读取对象
// 从 localStorage 获取 JSON 字符串并转换为对象
let storedUser = JSON.parse(localStorage.getItem('user'));
console.log(storedUser.name); // 输出: Alice
console.log(storedUser.age); // 输出: 25
3. 存储数组
// 创建一个数组
let items = ['apple', 'banana', 'cherry'];// 将数组转为 JSON 字符串并存储
localStorage.setItem('items', JSON.stringify(items));
4. 读取数组
// 从 localStorage 获取 JSON 字符串并转换为数组
let storedItems = JSON.parse(localStorage.getItem('items'));
console.log(storedItems); // 输出: ["apple", "banana", "cherry"]
四、localStorage
的常见应用场景 🌟
localStorage
是一个非常强大的工具,可以用于很多实际场景,以下是一些常见的使用方式:
1. 保存用户设置或偏好
如果你希望在用户重新访问页面时,保持他们的设置或偏好(比如主题颜色、语言选择等),可以使用 localStorage
来存储这些设置。
// 用户选择了暗黑模式
localStorage.setItem('theme', 'dark');// 当页面加载时,读取主题设置
let theme = localStorage.getItem('theme');
if (theme === 'dark') {document.body.classList.add('dark-theme');
}
2. 记住用户登录状态
你可以使用 localStorage
来保存用户的登录状态或身份信息,让用户下次访问时自动登录。
// 登录时,存储用户信息
let userInfo = {username: 'Alice',token: 'abc123'
};
localStorage.setItem('user', JSON.stringify(userInfo));// 下次访问时检查用户是否登录
let loggedInUser = JSON.parse(localStorage.getItem('user'));
if (loggedInUser) {console.log('User is logged in:', loggedInUser.username);
}
3. 保存购物车内容
购物车内容通常会跨页面显示,使用 localStorage
可以在不同页面之间保持购物车的状态。
// 用户将商品加入购物车
let cart = ['item1', 'item2', 'item3'];
localStorage.setItem('cart', JSON.stringify(cart));// 读取购物车内容
let cartItems = JSON.parse(localStorage.getItem('cart'));
console.log(cartItems); // 输出: ["item1", "item2", "item3"]
五、localStorage
的限制和注意事项 ⚠️
虽然 localStorage
非常方便,但它也有一些限制和注意事项,开发者在使用时需要了解:
- 存储大小限制:每个域名在浏览器中能够使用的存储空间是有限的,通常为 5MB。不同浏览器可能会有不同的限制,存储超出限制时会抛出异常。
- 数据只能存储字符串:
localStorage
只能存储字符串,如果需要存储对象或数组,必须先将它们转换为 JSON 字符串。 - 跨域访问不可用:
localStorage
仅在同一个源(即相同的协议、域名和端口)下有效,跨域之间的localStorage
数据不可共享。 - 安全性问题:数据存储在浏览器中并且没有加密,容易受到 XSS 攻击。因此,避免存储敏感信息,如密码、信用卡号等。
六、总结:轻松管理浏览器存储 🔄
localStorage
提供了一种非常简洁和高效的方式来在浏览器中持久化数据,它特别适用于存储一些不敏感、非临时的数据。通过 localStorage
,你可以在客户端存储用户设置、登录信息、购物车内容等,并在多个页面间共享这些数据。
记住,localStorage
只适用于存储少量数据,对于更复杂或更大的数据存储需求,可以考虑使用 IndexedDB 等其他更强大的存储方式。
通过理解和运用 localStorage
,你可以为用户提供更流畅的体验,同时减少与服务器的通信,提高网页性能。💪
相关文章:
JavaScript 本地存储 (localStorage) 完全指南
文章目录 JavaScript 本地存储 (localStorage) 完全指南 🔐一、什么是 localStorage?💡二、如何使用 localStorage?🔧1. 存储数据2. 读取数据3. 删除数据4. 清空所有数据 三、存储对象和数组的技巧 🎨1. 存…...
从golang的sync.pool到linux的slab分配器
最近学习golang的时候,看到golang并发编程中有一个sync.pool,即对象池,猛地一看这不跟linux的slab分配器类似嘛,赶紧学习记录下 这里先总结下设计sync.pool和slab的目的 sync.pool 为了缓解特定类型的对象频繁创建和销毁&#x…...

Python分形几何可视化—— 复数迭代、L系统与生物分形模拟
Python分形几何可视化—— 复数迭代、L系统与生物分形模拟 本节将深入探索分形几何的奇妙世界,实现Mandelbrot集生成器和L系统分形树工具,并通过肺部血管分形案例展示分形在医学领域的应用。我们将使用Python的NumPy进行高效计算,结合Matplo…...

【超详细】英伟达Jetson Orin NX-YOLOv8配置与TensorRT测试
文章主要内容如下: 1、基础运行环境配置 2、Torch-GPU安装 3、ultralytics环境配置 4、Onnx及TensorRT导出详解 5、YOLOv8推理耗时分析 基础库版本:jetpack5.1.3, torch-gpu2.1.0, torchvision0.16.0, ultralytics8.3.146 设备的软件开发包基础信息 需…...

Go语言学习-->项目中引用第三方库方式
Go语言学习–>项目中引用第三方库方式 1 执行 go mod tidy 分析引入的依赖有没有正常放在go.mod里面 找到依赖的包会自动下载到本地 并添加在go.mod里面 执行结果: 2 执行go get XXXX(库的名字)...
Vue Fragment vs React Fragment
文章目录 前言🧩 一、概念对比:Vue Fragment vs React Fragment📦 二、使用示例对比✅ Vue 3 中使用 Fragment✅ React 中使用 Fragment 🔍 三、差异解析1. **使用方式**2. **传递属性(如 key)**3. **插槽系…...
【LRU】 (最近最少使用)
LRU (最近最少使用) 文章目录 LRU (最近最少使用)一、LRU是什么?二、实现1.常规算法2.双栈更替总结 一、LRU是什么? LRU(Least Recently Used)是一种常见的缓存淘汰策略,核心思想是 “淘汰最长时间未被使用的缓存数据…...

每日Prompt:云朵猫
提示词 仰视,城镇的天空,一片形似猫咪的云朵,用黑色的简笔画,勾勒出猫咪的形状,可爱,俏皮,极简...

AI浪潮下的IT行业:威胁、转变与共生之道
目录 前言1 AI在IT行业的具体应用场景1.1 软件开发中的AI助手1.2 运维与监控的智能化1.3 测试自动化与质量保障1.4 安全防护中的智能威胁识别 2 AI对IT从业者的实际影响2.1 工作内容的结构性变化2.2 技能结构的再平衡 3 IT从业者不可替代的能力与价值3.1 复杂系统的架构与抽象能…...

基于功能基团的3D分子生成扩散模型 - D3FG 评测
D3FG 是一个在口袋中基于功能团的3D分子生成扩散模型。与通常分子生成模型直接生成分子坐标和原子类型不同,D3FG 将分子分解为两类组成部分:官能团和连接体,然后使用扩散生成模型学习这些组成部分的类型和几何分布。 一、背景介绍 D3FG 来源…...
Python Cookbook-7.12 在 SQLite 中储存 BLOB
任务 想将 BLOB 存入一个 SQLite 数据库, 解决方案 Python的 PySQLite 扩展提供了 sqlite.encode 函数,它可帮助你在 SOLite 数据库中插入二进制串。可以基于这个函数编写一个小巧的适配器类: import sqlite,cPickle class Blob(object):自动转换二进制串def __init__(self…...

蓝耘服务器与DeepSeek的结合:引领智能化时代的新突破
🌟 嗨,我是Lethehong!🌟 🌍 立志在坚不欲说,成功在久不在速🌍 🚀 欢迎关注:👍点赞⬆️留言收藏🚀 🍀欢迎使用:小智初学…...

无人机光纤FC接口模块技术分析
运行方式 1. 信号转换:在遥控器端,模块接收来自遥控器主控板的电信号。 2.电光转换:模块内部的激光发射器将电信号转换成特定波长的光信号。 3.光纤传输:光信号通过光纤跳线传输。光纤利用全内反射原理将光信号约束在纤芯内进行…...
【LeetCode】3170. 删除星号以后字典序最小的字符串(贪心 | 优先队列)
LeetCode 3170. 删除星号以后字典序最小的字符串(中等) 题目描述解题思路java代码 题目描述 题目链接:3170. 删除星号以后字典序最小的字符串 给你一个字符串 s 。它可能包含任意数量的 * 字符。你的任务是删除所有的 * 字符。 当字符串还…...
Oracle 用户名大小写控制
Oracle 用户名大小写控制 在 Oracle 数据库中,用户名的默认大小写行为和精确控制方法如下: 一 默认用户名大小写行为 不引用的用户名:自动转换为大写 CREATE USER white IDENTIFIED BY oracle123; -- 实际创建的用户名是 "WHITE"…...

作为过来人,浅谈一下高考、考研、读博
写在前面 由于本人正在读博,标题中的三个阶段都经历过或正在经历,本意是闲聊,也算是给将要经历的读者们做个参考、排雷。本文写于2022年,时效性略有落后,不过逻辑上还是值得大家参考,若所述存在偏颇&#…...

立志成为一名优秀测试开发工程师(第十一天)—Postman动态参数/变量、文件上传、断言策略、批量执行及CSV/JSON数据驱动测试
目录 一、Postman接口关联与正则表达式应用 1.正则表达式解析 2.提取鉴权码。 二、Postman内置动态参数以及自定义动态参数 1.常见内置动态参数: 2.自定义动态参数: 3.“编辑”接口练习 三、图片上传 1.文件的上传 2.上传后内容的验证 四、po…...
Global Security Market知识点总结:主经纪商业务
在全球证券市场的复杂体系中,主经纪商业务(Prime Brokerage)占据着独特且关键的位置。这一业务为大型机构投资者提供了一系列至关重要的服务,极大地影响着金融市场的运作与发展。 一、主经纪商业务的定义 主经纪商业务是投资银行…...

算法练习-回溯
今天开始新的章节,关于算法中回溯法的练习,这部分题目的难度还是比较大的,但是十分锻炼人的思维与思考能力。 处理这类题目首先要注意几个基本点: 1.关于递归出口的设置,这是十分关键的,要避免死循环的产…...
AI代码助手需求说明书架构
AI代码助手需求说明书架构 #mermaid-svg-6dtAzH7HjD5rehlu {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-6dtAzH7HjD5rehlu .error-icon{fill:#552222;}#mermaid-svg-6dtAzH7HjD5rehlu .error-text{fill:#552222;s…...
PTC过流保护器件工作原理及选型方法
PTC过流保护器件 (Positive Temperature Coefficient,正温度系数热敏电阻)是一种过流保护元件,其工作原理基于电阻值随温度变化的特性。当电路正常工作时,PTC的阻值很小,电流可以顺畅通过;但当…...
RabbitMQ 在解决数据库高并发问题中的定位和核心机制
RabbitMQ 在解决数据库高并发问题中的定位和核心机制 它是间接但极其有效的解决方案,以下内容聚焦如何最大化发挥 RabbitMQ 的潜力: 一、核心机制落地强化方案 1. 精准的异步化切割 关键原则:区分 “必须同步” 和 “可异步” 操作 #merma…...
VSCode主题定制:CSS个性化你的编程世界
在今天的数字世界,编程环境已成为开发者的第二大脑,而主题正是个性化你的创意空间的关键。本文将指导你如何使用CSS自定义VSCode的主题,让你的IDE不仅功能强大,更具视觉个性。 思路分析 设计思路: 创建主色调基调和…...
Windows 下彻底删除 VsCode
彻底删除 VS Code (Visual Studio Code) 意味着不仅要卸载应用程序本身,还要删除所有相关的配置文件、用户数据、插件和缓存。这可以确保你有一个完全干净的状态,方便你重新安装或只是彻底移除它。 重要提示: 在执行以下操作之前,…...

一文带你入门Java Stream流,太强了,mysqldba面试题及答案
list.add(“世界加油”); list.add(“世界加油”); long count list.stream().distinct().count(); System.out.println(count); distinct() 方法是一个中间操作(去重),它会返回一个新的流(没有共同元素)。 Stre…...

FastAPI安全异常处理:从401到422的奇妙冒险
title: FastAPI安全异常处理:从401到422的奇妙冒险 date: 2025/06/05 21:06:31 updated: 2025/06/05 21:06:31 author: cmdragon excerpt: FastAPI安全异常处理核心原理与实践包括认证失败的标准HTTP响应规范、令牌异常的特殊场景处理以及完整示例代码。HTTP状态码选择原则…...

阿里云 RDS mysql 5.7 怎么 添加白名单 并链接数据库
阿里云 RDS mysql 5.7 怎么 添加白名单 并链接数据库 最近帮朋友 完成一些运维工作 ,这里记录一下。 文章目录 阿里云 RDS mysql 5.7 怎么 添加白名单 并链接数据库最近帮朋友 完成一些运维工作 ,这里记录一下。 阿里云 RDS MySQL 5.7 添加白名单1. 登录…...

《Brief Bioinform》: 鼠脑单细胞与Stereo-seq数据整合算法评估
一、写在前面 基因捕获效率、分辨率一直是空间转录组细胞类型识别的拦路虎,许多算法能够整合单细胞(single-cell, sc)或单细胞核(single-nuclear, sn)数据与空间转录组数据,从而帮助空转数据的细胞类型注释。此前我们介绍过近年新出炉的Stereo-seq平台&…...

基于Springboot的宠物领养系统
本系统是一个面向社会的宠物领养平台,旨在帮助流浪宠物找到新家庭,方便用户在线浏览、申请领养宠物,并支持管理员高效管理宠物、公告和用户信息。 技术栈: -后端: Java 8Spring BootSpring MVCMyBatis-PlusMySQL 8R…...
AI API、AI 聊天助手,两大服务助力应用智能化转型
网络效应、转换成本——这些一度定义了我们这个时代商业逻辑的规则,在 AI 时代迅速崩塌。创新性功能被无差别克隆包围,差异化优势在底层能力翻新中消散…… 更别说那些决策迟缓、行动无法言出法随的“后来者”,注定与市场窗口擦身而过。唯快…...