摘要:在本教程中,您将了解Storage
类型以及如何使用JavaScript localStorage
来存储持久性数据。
Storage 类型的简介
Storage
类型旨在存储名称-值对。Storage
类型是一个Object
,它具有以下附加方法
setItem(name, value)
– 为名称设置值removeItem(name)
– 删除由名称标识的名称-值对。getItem(name)
– 获取给定名称的值。key(index)
– 获取给定数字位置的值的名称。clear()
– 删除所有值。
要获取Storage
对象中名称-值对的数量,可以使用length
属性。
Storage
对象只能存储字符串。它会在存储非字符串数据之前自动将其转换为字符串。
从Storage
对象中检索数据时,您将始终获得字符串数据。
JavaScript localStorage 对象
HTML5 规范引入了localStorage
作为一种在 Web 浏览器中存储无到期日期的数据的方式。
换句话说,即使关闭浏览器窗口,存储在浏览器中的数据也会持久存在。
存储在localStorage
中的数据绑定到一个来源。这意味着localStorage
对于每个protocol://host:port
都是唯一的。
localStorage 与 cookie 的比较
首先,存储在localStorage
中的数据不会像cookie那样在每次请求中发送到服务器。因此,您可以在localStorage
中存储更多数据。
大多数现代 Web 浏览器允许您在localStorage
中存储多达 5MB 的数据。请注意,您可以在 cookie 中存储多达 4KB 的数据。
其次,存储在localStorage
中的数据可以由客户端管理,特别是 Web 浏览器中的 JavaScript。服务器无法访问它。
但是,cookie 可以由 Web 浏览器中的 JavaScript 和服务器共同管理。
访问 localStorage
您可以通过window
对象的属性访问localStorage
window.localStorage
Code language: JavaScript (javascript)
由于localStorage
是Storage
类型的实例,因此您可以调用Storage
类型的方法来管理数据。
当您在控制台中键入以下代码时
window.localStorage
Code language: JavaScript (javascript)
…您将看到以下对象
Storage {length: 0}
Code language: CSS (css)
1) setItem() 方法
以下示例使用setItem()
方法在localStorage
中存储一个名称-值对
window.localStorage.setItem('theme','dark');
Code language: JavaScript (javascript)
2) length 属性
要获取名称-值对的数量,您可以像这样使用length
属性
console.log(window.localStorage.length); // 1
Code language: JavaScript (javascript)
由于window
对象是全局的,因此您不需要显式指定它。例如
console.log(localStorage.length); // 1
Code language: JavaScript (javascript)
3) getItem() 方法
要通过键获取值,可以使用getItem()
方法。以下示例使用getItem()
方法获取theme
键的值
localStorage.getItem('theme'); // 'dark'
Code language: JavaScript (javascript)
4) removeItem() 方法
要通过键删除一个名称-值对,可以使用removeItem()
方法。例如
localStorage.removeItem('theme');
Code language: JavaScript (javascript)
5) 循环遍历 localStorage 对象的键
以下代码将三个名称-值对存储到localStorage
中
localStorage.setItem('theme','light');
localStorage.setItem('backgroundColor','white');
localStorage.setItem('color','#111');
Code language: JavaScript (javascript)
要遍历存储在localStorage
中的名称-值对,可以使用Object.keys()
方法和for...of
循环
let keys = Object.keys(localStorage);
for(let key of keys) {
console.log(`${key}: ${localStorage.getItem(key)}`);
}
Code language: JavaScript (javascript)
输出
color: #111
theme: light
backgroundColor: white
Code language: HTTP (http)
存储对象
Storage
类型仅存储字符串数据。要存储对象,您需要使用JSON.stringify()
方法将它们转换为字符串。例如
const settings = {
backgroundColor: '#fff',
color: '#111',
theme: 'light'
};
localStorage.setItem('settings', JSON.stringify(settings));
console.log(localStorage.getItem('settings'));
Code language: JavaScript (javascript)
输出:(一个字符串)
'{"backgroundColor":"#fff","color":"#111","theme":"light"}'
Code language: JavaScript (javascript)
以下代码从localStorage
中检索值,并使用JSON.parse()
方法将其转换回对象。
let storedSettings = JSON.parse(localStorage.getItem('settings'));
console.log(storedSettings);
Code language: JavaScript (javascript)
storage 事件
当您对Storage
对象进行更改时,storage
事件将在文档上触发。
storage
事件在以下情况下发生
- 通过调用
setItem()
方法来存储一个名称-值对。 - 通过调用
removeItem()
方法删除一个名称-值对。 - 以及通过调用
clear()
方法删除所有值。
storage
事件具有以下属性
domain
– 存储更改所针对的域。key
– 已设置或删除的键。newValue
– 键设置为的值或null
(如果键已删除)。oldValue
– 设置或删除键之前的值。
要侦听storage
事件,可以使用window
对象的addEventListener()
方法,如下所示
addEventListener('storage', function(e){
console.log(`The value of the ${e.key} changed for the ${e.domain}.`);
});
Code language: JavaScript (javascript)
总结
Storage
类型为您提供了在 Web 浏览器中存储和管理数据的方法。localStorage
是Storage
类型的实例,它允许您在 Web 浏览器中存储持久性数据。localStorage
只能存储字符串。要存储对象,您可以使用JSON.stringify()
方法将其转换为字符串。当您从localStorage
中检索它们时,您可以使用JSON.parse()
方法将字符串转换为对象。