zoukankan      html  css  js  c++  java
  • JS之存储篇Web Storage

    引入

    Web Storage的目的是解决cookie带来的限制,当数据需要严格控制在客户端时,无需持续的将数据发回服务器。

    Web Storage的两个主要目标:提供一种在cookie之外的存储数据的方式、提供一种存储大量可以跨会话存在的数据的机制

    Web Storage分为两类:sessionStorage和localStorage。sessionStorage保存的数据用于浏览器的一次会话,当会话结束(通常是该窗口关闭),数据被清空;localStorage保存的数据长期存在,下一次访问该网站的时候,网页可以直接读取以前保存的数据。这两个对象的属性和方法完全一样

    Web Storage的存储空间要比Cookie大的多,Chrome是2.5MB,Firefox和Opera是5MB,IE是10MB。与Cookie一样,它们也受同域限制,某个网页存入的数据,只有同域下的网页才能读取

    存取数据

    sessionStorage和localStorage以键值对的形式存储数据,每一项数据都有一个键名和对应的值。所有的数据都是以文本格式保存

    setItem()

    setItem(key,value)用于存储数据,它接受两个参数,第一个是键名,第二个是保存的数据

    sessionStorage.setItem('name', 'wmui');
    localStorage.setItem('name', 'wmui');
    

    getItem()

    getItem(key)用于读取数据,它接收一个参数,表示要读取数据的键名

    var s = sessionStorage.getItem('name');
    var l = localStorage.getItem('name');
    

    除了使用setItem()和getItem()方法之外,还可以使用属性来存取数据

    localStorage.name = 'wmui'; // 存
    console.log(localStorage.name); // 取
    

    删除数据

    removeItem()

    removeItem(key)方法用于删除键名为key的存储项。如果键名不存在不会报错,而是静默失败

    localStorage.removeItem('name')
    sessionStorage.removeItem('name')
    

    除了使用removeItem()方法,还可以使用delete操作来删除存储项

    delete localStorage.name;
    delete sessionStorage.name;
    

    clear()

    clear方法用于删除所有已保存的数据

    localStorage.clear();
    sessionStorage.clear();
    

    遍历操作

    key()

    key(index)方法返回index位置处的存储项的键名

    localStorage.name = 'wmui'
    localStorage.token =  'asdf'
    console.log(localStorage.key(0), localStorage.key(1), localStorage.key(2)) // name token null
    

    length

    length属性返回名值对儿的个数

    console.log(localStorage.length); // 2
    

    利用length属性和key()方法,可以遍历所有的存储项

    for(var i = 0; i < localStorage.length; i++){
      var key = localStorage.key(i);
      var value = localStorage.getItem(key);
    }
    

    存储事件

    无论是sessionStorage还是localStorage,当存取数据和删除数据时都会触发storage事件。storage事件只发生在window对象上,使用DOM0级、DOM2级事件处理函数都可以

    只有数据发生改变时才会触发storage事件,也就是说,给已经存在的存储项设置一个一模一样的值,抑或是删除一个本来就不存在的存储项都是不会触发存储事件的

    一般地,storage事件不在导致数据变化的当前页面触发,如果浏览器同时打开一个域名下面的多个页面,当其中的一个页面改变sessionStorage或localStorage的数据时,其他所有页面的storage事件会被触发,而原始页面并不触发storage事件。可以通过这种机制,实现多个窗口之间的通信

    注意: IE9+浏览器与其他标准浏览器有所不同,无论数据真实值是否变化,只要对数据进行设置或删除,都会触发该事件,且原始页面和同一域名下的其他页面都会触发

    storage事件的event对象有以下属性:

    url:触发事件的链接地址
    key:设置或者删除的键名
    newvalue:如果是设置值,则是新值;如果是删除键,则是null
    oldValue:键被更改之前的值
    storageArea:返回触发事件的对象
    

    示例

    <button id="btn">btn</button>
    <script>
      localStorage.name = 'wmui'
      btn.onclick = function() {
        localStorage.name = 'aaa'
      }
      window.onstorage = function(e) {
        console.log(e.url,e.key,e.newValue, e.oldValue,e.storageArea)
      }
    </script>
    

    同时打开两个地址为http://127.0.0.1:3030/的窗口,在B窗口点击按钮,A窗口打印信息如下:

    优秀文章首发于聚享小站,欢迎关注!
  • 相关阅读:
    寄存器英文全称
    汇编指令介绍
    汇编指令的基本知识
    第一篇
    Windows下让Git记住用户名密码(https)
    javascript 汉字拼音排序
    KO.js学习笔记(一)
    学javascript突发奇想,只用浏览器就能转换进制
    谨此纪念我的技术成长之路
    委托与事件
  • 原文地址:https://www.cnblogs.com/yesyes/p/15356309.html
Copyright © 2011-2022 走看看