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

网络Web存储之LocalStorage

文章目录

  • LocalStorage介绍
    • 定义
    • 特点
    • 兼容性
    • 常用方法
      • 存值
      • 取值
      • 删除指定键值对
      • 清空所有键值对
      • 通过索引获取键名
      • 获取所有值
      • 判断是否含有某个键(key)
      • 拓展
        • 遍历得到key
        • 存储和读取复杂类型的数据
    • 应用场景

LocalStorage介绍

定义

LocalStorageHTML5提供的一种客户端存储机制,属于Web存储API的一部分。它允许网页在用户的浏览器中存储键值对数据,这些数据会以持久化的方式保存,除非用户手动清除浏览器缓存,或者通过 JavaScript代码进行删除操作,否则数据将一直存储在用户的本地浏览器中。

从技术角度来看,LocalStoragewindow 对象的一个属性,是一个存储对象,它提供了一些简单的方法来操作存储的数据,如 setItemgetItemremoveItemclear 等,以实现数据的存储、读取、删除和清除所有数据的功能。

特点

  • 持久性: LocalStorage存储的数据是永久的,除非用户主动清楚浏览器缓存或使用JavaScript代码删除,否则数据将一直保留在浏览器中。
  • 同源策略: 遵循同源策略,即不同源的页面无法访问彼此的LocalStorage数据,这里的同源指的是协议、域名和端口都相同。
  • 容量较大: 一般来说,浏览器对 LocalStorage 的存储空间限制相对较大,通常可以达到 5MB 甚至更多,具体大小因浏览器而异。
  • 简单易用: 提供了简单的 API,方便开发者进行数据的存储、读取和删除操作。
  • 与服务器无关: 数据存储在本地浏览器,不需要与服务器进行交互,读取数据时可以直接从本地获取,提高了数据访问的速度,减轻了服务器的负担。

兼容性

LocalStorage 在现代浏览器中得到了广泛支持,包括 ChromeFirefoxSafariEdge 等。然而,在一些旧版本的浏览器或某些特殊环境下,可能存在兼容性问题。在使用 LocalStorage 时,可以通过检测window.localStorage是否存在来判断浏览器是否支持 LocalStorage。例如:

if(typeof window.localStorage !== 'undefined') {
	//浏览器支持LocalStorage,,可以进行相关操作
} else {
	//浏览器不支持LocalStorage,给出提示或其他替代方案
	console.log("浏览器不支持LocalStorage");
}

常用方法

存值

存值方式一共有三种。

  • localStorage.setItem(key,value);
  • localStorage[key] = value
  • localStorage.key = value

用于将键值对存储到 LocalStorage 中。如果键已经存在,则更新其对应的值;如果键不存在,则创建一个新的键值对。注意:键和值的格式。例如:

//存储值
//第一种方式
localStorage.setItem('name', 'John');
//第二种方式
localStorage['name'] = 'john';
//第三种方式 第三种键值格式与前两种有差别
localStorage.name = 'john';
//更新
localStorage.setItem('name','sam');
//其他两种同样

取值

取值方式与存值方式类似,也有三种。

  • localStorage.getItem(key)
  • localStorage[key]
  • localStorage.key

根据指定的键获取对应的值。如果键不存在,则返回null

//取值
//第一种方式
localStorage.getItem('name');
//第二种方式
localStorage['name'];
//第三种方式 第三种键值格式与前两种有差别
localStorage.name;

删除指定键值对

  • localStorage.removeItem(key)

用于删除指定键的键值对。例如:

//删除键值为name的键值对
localStorage.removeItem('name');

清空所有键值对

  • localStorage.clear()

用于删除所有键值对。

通过索引获取键名

  • localStorage.key(index)

用于获取指定索引位置的键名。索引从 0 开始。例如:

localStorage.key(0);
//获取索引为0的键名
//返回值为键名

获取所有值

  • `localStorage.valueOf()

取出所有的值,返回一个对象。

localStorage.valueOf();
//返回值 例如;
/*
 *   {
 *   	name:'john',
 *	 	age:'22'
 *		...
 *		}

/

判断是否含有某个键(key)

  • localStorage.hasOwnProperty(key)

判断是否含有某个键(key),如果有返回true,没有则返回false

localStorage.hasOwnProperty('name');

拓展

遍历得到key

可以使用for循环、 for...in 循环或 Object.keys() 方法来遍历 LocalStorage 中的所有键值对。

//for
for(let i = 0;i<localStorage.length;i++){
    //打印键
    console.log(localStorage.key(i));
    //打印值
    console.log(localStorage.getItem(localStorage.key(i)));
}

//for in 

for(let key in localStorage) {
    if(localStorage.hasOwnPreperty(key)) {
        let value = localStorage.getItem(key);
        console.log(`${key}: ${value}`);
    }
}

//使用Object.keys() 方法遍历
let keys = Object.keys(localStorage);
for(let key of keys) {
    let value = localStorage.getItem(key);
    console.log(`${key}: ${value}`);
}
存储和读取复杂类型的数据

LocalStorage只能存储字符串类型的数据,但是可以存储JSON格式的数据,将复杂类型的数据通过JSON.stringify()转换为JSON字符串进行存储,读取时使用JSON.parse()还原。

在实际应用中,LocalStorage 可以用于存储一些用户偏好信息(如页面主题、字体大小)、表单数据(如自动保存用户未完成的表单输入)、缓存一些不经常更新的数据等,以提高用户体验和网站性能。但需要注意的是,由于存储的数据是明文的,不建议存储敏感信息,且存储容量有限,需要合理使用。

下面是一个存储和读取复杂对象的操作:

let user = {
    name:"Alice",
    age:20,
    hobbies:['reading','swimming'];
}
//存储对象,将对象转换为JSON字符串
localStorage.setItem('user',JSON.stringify(user));

//读取对象,将存储于的JSON字符串转换为对象

let storedUser = JSON.parse(localStorage.getItem('user'));
console.log(storedUser);
//输出: { name: 'Alice', age: 30, hobbies: ['reading','swimming'] }

应用场景

  • 用户偏好设置:可以存储用户在网站上的个性化设置,如主题颜色、字体大小、语言偏好等。当用户下次访问网站时,直接从 LocalStorage 中读取这些设置,为用户提供一致的个性化体验。
  • 缓存数据:对于一些不经常变化且需要频繁访问的数据,如网站的静态资源路径、一些基础配置信息等,可以将其存储在 LocalStorage 中。这样在页面加载时,可以直接从本地获取数据,减少服务器请求,提高页面加载速度。
  • 离线应用:在一些离线应用中,LocalStorage 可以用于存储应用所需的数据。例如,离线阅读应用可以将用户下载的书籍内容存储在 LocalStorage 中,以便用户在没有网络的情况下也能阅读。
  • 表单数据存储:当用户在填写表单时,如果因为某些原因需要暂停操作,下次打开页面时可以从 LocalStorage 中读取之前填写的数据并自动填充,避免用户重复输入。

http://www.kler.cn/a/512509.html

相关文章:

  • vim文本编辑器
  • Ubuntu22部署MySQL5.7详细教程
  • 图片生成Prompt编写技巧
  • RabbitMQ---TTL与死信
  • Linux 使用 GDB 进行调试的常用命令与技巧
  • 有限元分析学习——Anasys Workbanch第一阶段笔记(13)网格单元分类、物理场与自由度概念
  • 具体场景的 MySQL 与 redis 数据一致性设计
  • doris:Azure Storage导入数据
  • 【Java 学习】详讲代码块:控制流语句代码块、方法代码块、实例代码块(构造代码块)、静态代码块、同步代码块
  • MacOS/C/C++下怎样进行软件性能分析(CPU/GPU/Memory)
  • 《keras 3 内卷神经网络》
  • хорошо哈拉少wordpress俄语主题
  • 【Redis】AOF持久化的实现与原理
  • Go环境搭建(vscode调试)
  • C ++ 也可以搭建Web?高性能的 C++ Web 开发框架 CPPCMS + MySQL 实现快速入门案例
  • docker 安装 nanomq
  • 深入探索Python人脸识别技术:从原理到实践
  • 202209 青少年软件编程等级考试C/C++ 二级真题答案及解析(电子学会)
  • HTML知识点复习
  • 【无法下载github文件】虚拟机下ubuntu无法拉取github文件
  • dubbo 的 spi 思想是什么?
  • [前端算法]排序算法
  • C#使用WMI获取控制面板中安装的所有程序列表
  • ChatGPT 4:解锁AI文案、绘画与视频创作新纪元
  • MySQL篇之对MySQL进行参数优化,提高MySQL性能
  • YOLOv9改进,YOLOv9检测头融合RFAConv卷积,适合目标检测、分割任务