html5 中的 Web Storage 包括了两种存储方式:sessionStorage 和 localStorage。 sessionStorage 用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面才能访问,会话结束后数据也随之销毁。localStorage 用于存储一个域名下的须要永久存在在本地的数据,这些数据能够被一直访问,直到这些数据被删除。所以sessionStorage 和 localStorage 的主要区别在于他们存储数据的生命周期,sessionStorage 存储的数据的生命周期是一个会话,而 localStorage 存储的数据的生命周期是永久,直到被主动删除,不然数据永远不会过时的。javascript
Web Storage 和 cookie 有许多相同之处:html
Web Storage 和 cookie 也有不一样之处:html5
相比 cookie ,Web Storage 的优势主要表如今存储空间更大,可存储的内容更大。cookie每次都随请求数据发送到服务器端,Web Storage不会和请求数据一同发送到服务器端,占用带宽更少。缺点主要表如今,如今全部浏览器都支持 cookie 操做,而只有如今浏览器才支持 Web Storage 操做,若是须要兼容老旧浏览器,就不能使用 Web Storage。java
localStorage 和 sessionStorage 有着统一的API接口,这为两者的操做提供了极大的便利。下面以 localStorage 为例来介绍一下 API 接口使用方法,一样这些接口也适用于 sessionStorage。浏览器
添加键值对:localStorage.setItem(key, value)服务器
setItem
用于把值 value 存储到键key上,除了使用 setItem
,还可使用 localStorage.key = value
或者 localStorage['key'] = value
这两种形式。另外须要注意的是,key和value值必须是字符串形式的,若是不是字符串,会调用它们相应的toString()
方法来转换成字符串再存储。当咱们要存储对象是,应先转换成咱们可识别的字符串格式(好比JSON格式)再进行存储。cookie
// 把一个用户名(lilei)存储到 name 的键上 localStorage.setItem('name', 'lilei'); // localStorage.name = 'lilei'; // localStorage['name'] = 'lilei'; // 把一个用户存储到user的键上 localStorage.setItem('user', JSON.stringify(id:1, name:'lilei'));
获取键值:localStorage.getItem(key)session
getItem
用于获取键 key 对应的数据,和 setItem
同样,getItem
也有两种等效形式 value = localStorage.key
和 value = localStorage['key']
。获取到的 value 值是字符串类型,若是须要其余类型,要作手动的类型转换。url
// 获取存储到 name 的键上的值 var name = localStorage.getItem('name'); // var name = localStorage.name; // var name = localStorage['name']; // 获取存储到user的键上的值 var user = JSON.parse(localStorage.getItem('user'));
删除键值对:localStorage.removeItem(key)code
removeItem
用于删除指定键的项,localStorage 没有数据过时的概念,全部数据若是失效了,须要开发者手动删除。
var name = localStorage.getItem('name'); // 'lilei' // 删除存储到 name 的键上的值 localStorage.removeItem('name'); name = localStorage.getItem('name'); // null
清除全部键值对:localStorage.clear()
clear
用于删除全部存储的内容,它和removeItem
不一样的地方是removeItem
删除的是某一项,而clear是删除全部。
// 清除 localStorage localStorage.clear(); var len = localStorage.length; // 0
获取 localStorage 的属性名称(键名称):localStorage.key(index)
key
方法用于获取指定索引的键名称。须要注意的是赋值早的键值对应的索引值大,赋值完的键值对应的索引小, key
方法可用于遍历 localStorage 存储的键值。
localStorage.setItem('name','lilei'); var key = localStorage.key(0); // 'name' localStorage.setItem('age', 10); key = localStorage.key(0); // 'age' key = localStorage.key(1); // 'name'
获取 localStorage 中保存的键值对的数量:localStorage.length
length
属性用于获取 localStorage 中键值对的数量。
localStorage.setItem('name','lilei'); var len = localStorage.len; // 1 localStorage.setItem('age', 10); len = localStorage.len; // 2
storage 事件
当存储的数据发生变化时,会触发 storage 事件。但要注意的是它不一样于click类的事件会事件捕获和冒泡,storage 事件更像是一个通知,不可取消。触发这个事件会调用同域下其余窗口的storage事件,不过触发storage的窗口(即当前窗口)不触发这个事件。
storage 的 event 对象的经常使用属性以下:
oldValue:更新前的值。若是该键为新增长,则这个属性为null。 newValue:更新后的值。若是该键被删除,则这个属性为null。 url:原始触发storage事件的那个网页的网址。 key:存储store的key名
function storageChanged() { console.log(arguments); } window.addEventListener('storage', storageChanged, false);
基于 Web Storage 的特色,它主要被用于储存一些不常常改动的,不敏感的数据,好比全国省市区县信息。还能够存储一些不过重要的跟用户相关的数据,好比说用户的头像地址、主题颜色等,这些信息能够先存储在用户本地一份,便于快速呈现,等真正从服务器端读取成功后再更改头像地址,主题颜色。另外,基于 storage 事件特色,Web Storage 还能够用于同域不一样窗口间的通讯。