JS 存储web storage

96 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第8天,点击查看活动详情

前言

Web Storage 规范主要的两个目标:

  • 提供在 cookie 之外的存储会话数据的路径
  • 提供跨会话持久化存储大量数据的机制

主要通过两个对象:localStorage 和 sessionStorage 。localStorage 是永久存储机制,sessionStorage是跨会话的存储机制。目前基本所有的浏览器都支持这2个对象。

Storage 类型

storage 类型用于保存name/value 对数据。由浏览器决定存储的空间上限。但需要注意, storage 只能存储字符串,其他非字符串都需要转成字符串。其还增加很多方法可以直接通过 storage 对象调用。

  • clear() 删除所有的值,在火狐浏览器不可用
  • getItem(name) 获取给定的 name 值
  • key(index) 取得给定数值的位置名称
  • removeItem(name) 删除给定的 name的名/值对

sessionstorage 对象

sessionStorage 对象只存储会话数据。所以如果关闭浏览器的话,存储的数据就会被清除。通过使用 setItem 方法或直接属性赋值的方式添加数据。

sessionStorage.setItem("name","Tommy")
sessionStorage.name="Lily"

localStorage 对象

localStorage 在客户端持久存储数据,其主要是取代了 globalStorage 对象。所以如果在同一个 localStorage 对象中且在同一域,相同端口下所以访问的 localStorage 对象都是同一个。其用法和sessionStorage 对象都是一样的,因为它们都是 Storage 对象。

localStorage.setItem("name","Tommy")
localStorage.name="Lily"

localStorage 和sessionStorage 对象主要区别是:

  • 存储在 localStorage 对象中的数据只有在使用 js 删除或者删除浏览器缓存时才会被删除。页面刷新、关闭、重启浏览器等操作都不会影响其数据
  • sessionStorage 在关闭浏览器后就会被删除

存储事件

当 storage 对象发生变化时就会触发 storage 事件。基本进行设置值、删除、调用 clear 都会触发事件。

window.addEventListener("storage",(event)=>{ 
 // to do something ...
})

storage 事件对象有 4个属性:domian 对应的域、被操作的key ,被设置的新值,若时删除就是null;还有就是之前旧值 oldValue。需要注意 storage 事件是无法区分时是localStorage 对象还是 sessionStorage 对象。