HTML5本地存储 Web Storage

Web Storage基本介绍

  HTML5 定义了本地存储规范 Web Storage , 提供了两种存储类型 API  sessionStorage 和 localStorage,两者的差别主要是数据的保存时长及数据的共享方式。html

    localStorage 一直存储在本地,数据存储是永久的,除非用户或程序对其进行删除操做;前端

    sessionStorage在会话期内有效,数据在浏览器关闭后自动删除;html5

    localStorage是基于域的,任何在该域内的页面均可以访问, sessionStorage在保存它的窗口,和由当前窗口建立的新窗口有效,直到相关联的标签页关闭; android

  Web Storage实际上是HTML4 中 cookies存储机制的一个改进版本,可是两种机制的功能又不相同:面试

    cookie在浏览器和服务器间来回传递, sessionStorage和localStorage不会;浏览器

    sessionStorage和localStorage的存储空间更大,有更多丰富易用的接口,各自独立的存储空间;服务器

  请注意以上区别,前端面试中,只要问到 html5 相关 基本就这些。cookie

浏览器的支持状况

  目前全部主流的浏览器都在必定程度上支持 HTML5 的 Web Storage特性。 由下图能够看出,基本上全部现代浏览器都已经支持 Web Storage。session

  

  移动浏览器的状况更为乐观iphone

  Android平台和 IOS 平台各自的浏览器都基本上支持 Web Storage 本地存储特性。 目前市场上的移动设备, 除了 android 手机和 iphone 手机外,愈来愈多的平板电脑面世,并且基本上依赖着两种平台。在移动端使用 Web Storage 咱们几乎不须要考虑浏览器是否支持, 固然从代码的严谨来讲,建议最好在使用前先检查浏览器是否支持

if (window.localStorage) {
    // 浏览器支持 localStorage
}

if (window.sessionStorage) {
    // 浏览器支持 sessionStorage
}

Web Storage API

interface Storage {
  readonly attribute unsigned long length;
  DOMString? key(unsigned long index);
  getter DOMString getItem(DOMString key);
  setter creator void setItem(DOMString key, DOMString value);
  deleter void removeItem(DOMString key);
  void clear();
};

  所谓DOMString: 一个UTF-16字符串,JavaScript正是使用了这种编码的字符串,因此DOMString就等同是JavaScript中的String.

  每一个存储对象提供一个 key/value ( 键/值 ) 对列表, 被称为数据项。 key 能够是任意的字符串( 包括空字符串 ),value 也能够是任意的字符串

  规范定义的接口提供了: 

  localStorage.length                          一个只读的 length属性。 能够知道 localStorage 中存储着多少条数据

  localStorage.setItem(key, val)          存储一条数据

  localStorage.getItem(key)                经过 key 获取该条数据

  localStorage.removeItem(key)          删除一条数据 

  localStorage.clear()                         清空全部 key/value 键值对 items

      

  Storage 只能存储key/value对,并且只支持字符串类型的数据, setItem() 方法传入的值都会自动转化为 string 类型。复合数据类型(Array Object)转化结果同 toString 方法。

   若是你想保存其它类型的数据,在保存的时候须要转化成字符串,在读取时,再转化回来;

  使用 localStorage 存储和读取 JSON 格式数据:

// 定义JSON格式字符串
var userData = {
    name: "zichen",
    age: "24",
    sex: "男",
    adress: "杭州"
}

// 存储 userData 数据
localStorage.setItem("userData", JSON.stringify(userData));

// 读取 userData 数据并赋值给变量
var newUserData = JSON.parse(localStorage.getItem("userData"));

console.log(newUserData);

// 删除 userData 
localStorage.removeItem("userData");

  sessionStorage 浏览器支持状况同 localStorage , 属性和方法及使用方式也和 localStorage一致。

Storage 事件监听

  对 Storage 进行存取操做的同时,若是需进行监听,可使用 HTML5 Web Storage API内置的事件监听器对数据进行监控, Storage中的数据有任何变更,Storage监听器都能捕获,接口定义:

interface StorageEvent : Event {
  readonly attribute DOMString key;
  readonly attribute DOMString? oldValue;
  readonly attribute DOMString? newValue;
  readonly attribute DOMString url;
  readonly attribute Storage? storageArea;
};

  key 表示属性中的键名。

  oldValue 更新前的键值。

     newValue 数据更新后的键值。

  url 记录 Storage 事件发生时的源地址。

  StorageArea 指向事件监听对应的 Storage对象

  

  使用 w3c 标准事件注册方法 addEventListener 进行注册监听:

window.addEventListener(“storage”,
    function(e) {
        console.log(e)
    },
    true);
相关文章
相关标签/搜索