JavaScript

JavaScript 知识量:26 - 101 - 483

24.2 Web Storage><

Web Storage简介- 24.2.1 -

Web Storage是HTML5引入的一项重要功能,用于在用户的计算机上存储数据,如用户的偏好设置、复选框的选中状态、文本框的默认填写值等。这种存储方式可以让网页在用户浏览器中保留和恢复状态信息,而不需要每次都在服务器端处理。

Web Storage还有一些重要的特性:

  • 容量较大:可以存储大约5MB的数据。

  • 本地数据可以即时获得:借助浏览器的缓存机制,整个页面和数据都可以保存在本地,从本地读数据通常比通过网络从服务器获得数据要快得多,可以立即显示网页中缓存的内容。

  • 数据可以临时存储:用户在浏览器中刷新网页时,网页通过Web Storage就可以知道用户之前所做的一些修改,而不需要将用户修改的内容存储在服务器端。

与Cookie相比,Web Storage存储的数据不会发送给服务器(即不会增加网络流量),而且不受每个站点的cookie数量限制。

Storage类型- 24.2.2 -

Web Storage有两种类型:sessionStorage和localStorage。sessionStorage与页面会话(即浏览器重新加载或恢复页面的过程中)的生命周期相关联,而localStorage则没有这个限制,数据会在用户的浏览器中持久保存。

sessionStorage将数据保存在session对象中,浏览器关闭后,数据会被删除。它通常用于存储在特定会话期间需要保存的数据。

localStorage将数据保存在客户端本地的硬件设备中,即使浏览器被关闭,数据仍然存在,下次打开浏览器访问网站时仍然可以继续使用。它通常用于存储不需要过期或者用户长时间不需要清除的数据。

除了sessionStorage和localStorage之外,还有其他一些存储数据的方式,例如使用cookie、IndexedDB、Cache API等。

sessionStorage对象- 24.2.3 -

sessionStorage对象是Web Storage API的一部分,它提供了一个简单的键值对存储系统,可以将数据存储在用户的浏览器中,用于在同一个会话期间(即浏览器打开期间)保持数据。

sessionStorage对象与localStorage对象非常相似,但有一些重要的区别。首先,sessionStorage对象存储的数据只在当前浏览器窗口或标签页的生命周期内存在,而localStorage对象存储的数据是永久的,除非用户清除浏览器缓存或者开发者显式地删除这些数据。

其次,sessionStorage对象不接受setItem()、removeItem()和clear()方法。这是因为这些方法在sessionStorage对象中没有定义,如果尝试调用这些方法,JavaScript会抛出错误。相反,sessionStorage对象提供了setItem()、getItem()和length属性来操作存储的数据。

使用sessionStorage对象存储数据非常简单。例如,要将一个值存储在sessionStorage中,可以使用以下代码:

sessionStorage.setItem('myKey', 'myValue');

要从sessionStorage中获取一个值,可以使用以下代码:

var myValue = sessionStorage.getItem('myKey');

要删除一个值,可以使用以下代码:

sessionStorage.removeItem('myKey');

要清除所有存储在sessionStorage中的数据,可以使用以下代码:

sessionStorage.clear();

localStorage对象- 24.2.4 -

localStorage对象是HTML5中引入的一个新特性,它提供了一个用于在用户的浏览器中存储数据的对象。与cookie不同,localStorage存储的数据不会被发送到服务器,因此可以用来存储用户在浏览器中生成或使用的任何数据,而无需担心数据被发送到服务器。

localStorage对象存储的数据是持久性的,即使浏览器被关闭或用户关闭计算机,数据仍然存在。用户可以在浏览器中随时访问这些数据,而无需进行任何网络请求。

localStorage对象的使用非常简单。可以使用setItem()方法将一个值存储在localStorage中,使用getItem()方法获取一个值,使用removeItem()方法删除一个值,以及使用clear()方法清除所有存储的数据。

需要注意的是,localStorage对象只能存储字符串和数字数据。如果尝试存储其他类型的数据,例如对象或数组,它们将被自动转换为字符串或数字。因此,在使用localStorage对象时,需要注意数据的类型和格式。

此外,localStorage对象的容量限制通常比cookie大得多。大多数浏览器支持的localStorage大小为约5MB,但具体的容量限制可能因浏览器而异。因此,在使用localStorage对象时,需要注意数据的量和类型,以避免超出存储容量限制。

存储事件- 24.2.5 -

存储事件是指当Web存储(localStorage或sessionStorage)中的数据发生变化时,触发的一种浏览器事件。这种事件主要用于监听存储数据的变化,以便在数据发生改变时做出相应的处理。

在HTML5中,每当localStorage或sessionStorage对象发生变化时,浏览器都会在文档上触发storage事件。具体来说,以下情况会触发storage事件:

  • 使用setItem()方法设置值;

  • 使用getItem()方法获取值;

  • 使用removeItem()方法删除值;

  • 使用clear()方法清除所有存储的数据。

要使用存储事件,需要先通过事件监听器来绑定一个事件处理函数。当存储数据发生变化时,这个函数就会被调用。在事件处理函数中,可以通过event对象的key、newValue和oldValue属性来获取发生变化的键名、新值和旧值。例如:

window.addEventListener('storage', function(event) {  
  console.log('Key:', event.key);  
  console.log('New value:', event.newValue);  
  console.log('Old value:', event.oldValue);  
});

在上面的例子中,通过将一个事件监听器绑定到window对象的storage事件上,当localStorage或sessionStorage中的数据发生变化时,就会执行该事件处理函数。在函数中,可以通过event对象的属性来获取发生变化的键名、新值和旧值,并进行相应的处理。

Web Storage的限制- 24.2.6 -

Web Storage的限制包括以下几个方面:

  • 存储大小限制:Web Storage的存储大小是有限的,通常单个站点的localStorage和sessionStorage限制为约5MB。这意味着每个站点最多可以存储约5MB的数据。如果超过这个限制,浏览器将不会保存数据,并可能导致数据丢失。不过,不同的浏览器可能实现了不同的存储容量限制,因此在开发Web应用程序时,最好进行适当的测试和调整。

  • 存储时间限制:Web Storage存储的数据是持久性的,即浏览器关闭后数据仍然存在。对于localStorage,数据没有过期时间,即除非手动删除或清空,否则数据会一直存在。而sessionStorage中的数据仅在当前会话期间存在,浏览器关闭后会被清除。

  • 存储数据类型限制:Web Storage只能存储字符串和数字数据。如果尝试存储其他类型的数据,例如对象或数组,它们将被自动转换为字符串或数字。因此,在使用Web Storage时,需要注意数据的类型和格式。

  • 存储事件监听限制:虽然Web Storage事件可以被触发并用于监听存储数据的变化,但并非所有浏览器都支持该事件。例如,IE 8及以下版本的浏览器不支持该事件。因此,在使用Web Storage事件时,需要注意浏览器的兼容性问题。