写点什么

Vue 进阶(幺玖肆):localStorage 应用总结

用户头像
华强
关注
发布于: 3 小时前
Vue进阶(幺玖肆):localStorage应用总结

一、什么是 localStorage、sessionStorage

HTML5中,新加入了localStorage特性,这个特性主要是用作本地存储,解决了cookie存储空间不足的问题(cookie中每条cookie存储空间为 4k),localStorage中一般浏览器支持的是5M大小,这个在不同的浏览器中localStorage会有所不同。

二、localStorage 的优势与局限

localStorage优势


  • localStorage拓展了cookie的 4K 限制;

  • localStorage可以将第一次请求的数据直接存储到本地,这个相当于一个5M 大小的针对于前端页面的数据库,相比于cookie可以节约带宽,但是这个却是只有在高版本的浏览器中才支持的。


localStorage局限


  • 针对不同浏览器,localstorage大小不统一,并且在IE8以上的 IE 版本才支持localStorage属性;

  • 目前所有的浏览器都会把localStorage的值类型限定为string类型,对于比较常见的JSON对象类型需要一些转换;

  • localStorage在浏览器隐私模式下面是不可读取的;

  • localStorage本质上是对字符串的读取,如果存储内容多的话会消耗内存空间,会导致页面变卡;

  • localStorage不能被爬虫抓取到;


localStoragesessionStorage的唯一一点区别就是localStorage为永久性存储,而sessionStorage当会话结束的时候,sessionStorage中的键值对会被清空。

三、localStorage 应用

localStorage在浏览器中的支持情况如下:



这里要特别声明一下,如果是使用 IE 浏览器的话,那么就要UserData来作为存储,这里主要讲解的是localStorage内容,所以userData不做过多的解释,因为目前的IE6/IE7属于淘汰的位置上,而且在如今的很多页面开发都会涉及到HTML5\CSS3等新兴技术,所以在使用上面一般我们不会去对其进行兼容。


首先,在使用localStorage的时候,需要判断浏览器是否支持localStorage属性。


if(!window.localStorage){     alert("浏览器不支持localstorage");     return false; }else{     //主逻辑业务 }
复制代码


localStorage写入,localStorage写入有三种方法,下面一一介绍下:


if (!window.localStorage) {   alert("浏览器不支持localstorage");   return false; } else {   var storage = window.localStorage;   //写入a字段   storage["a"]=1;   //写入b字段   storage.a=1;   //写入c字段   storage.setItem("c",3);   console.log(typeof storage["a"]);   console.log(typeof storage["b"]);   console.log(typeof storage["c"]); }
复制代码


运行后结果如下:



这里要特别说明一下localStorage的使用也是遵循同源策略的,所以不同网站不能共用相同的localStorage


最后在控制台上面打印出来的结果是:



不知道有没有童鞋注意到,刚刚存储进去的是int类型,但打印出来却是string类型,这个与localStorage本身特点有关,localStorage只支持string类型的存储。


localStorage读取


if (!window.localStorage) {     alert("浏览器不支持localstorage"); } else {     var storage = window.localStorage;     //写入a字段     storage["a"] = 1;     //写入b字段     storage.a = 1;     //写入c字段     storage.setItem("c",3);     console.log(typeof storage["a"]);     console.log(typeof storage["b"]);     console.log(typeof storage["c"]);     //第一种方法读取     var a = storage.a;     console.log(a);     //第二种方法读取     var b = storage["b"];     console.log(b);     //第三种方法读取     var c = storage.getItem("c");     console.log(c); }
复制代码


上面演示了对localStorage的三种存储/读取方式,官方推荐getItem\setItem这方法对其进行存取。


前面说过localStorage相当于前端数据库,数据库主要是CRUD,这里的读取和写入就相当于增、查两个步骤。


接下来谈下localStorage的删、改操作:


改这个步骤比较好理解,思路跟重新更改全局变量一样:


if (!window.localStorage) {    alert("浏览器不支持localstorage");} else {    var storage = window.localStorage;    //写入a字段    storage["a"] = 1;    //写入b字段    storage.b = 1;    //写入c字段    storage.setItem("c",3);    console.log(storage.a);    // console.log(typeof storage["a"]);    // console.log(typeof storage["b"]);    // console.log(typeof storage["c"]);    /*分割线*/    storage.a = 4;    console.log(storage.a);}
复制代码


在控制台可看到 a 键已经被更改为 4。


localStorage的删除


1、将localStorage所有内容清除


var storage = window.localStorage;storage.a = 1;storage.setItem("c",3);console.log(storage);storage.clear();console.log(storage);
复制代码


2、 将localStorage中某个键值对删除


var storage = window.localStorage;storage.a = 1;storage.setItem("c",3);console.log(storage);storage.removeItem("a");console.log(storage.a);
复制代码


控制台查看结果



localStorage键值获取


var storage = window.localStorage;storage.a = 1;storage.setItem("c",3);for(var i = 0; i < storage.length; i++){    var key = storage.key(i);    console.log(key);}
复制代码


使用key()方法,向其中输入索引即可获取对应的键值。

四、localStorage 注意事项

一般我们会将JSON存入localStorage中,但是在localStorage会自动将localStorage转换成为字符串形式。


这个时候可以使用JSON.stringify(),将JSON对象转换成为JSON字符串


示例:


if (!window.localStorage) {    alert("浏览器不支持localstorage");} else {    var storage = window.localStorage;    var data = {        name:'SHQ5785',        sex:'man',        hobby:'program'    };    var d = JSON.stringify(data);    storage.setItem("data",d);    console.log(storage.data);}
复制代码


读取之后,使用JSON.parse()方法将JSON字符串转换成为JSON对象:


var storage = window.localStorage;var data = {    name:'SHQ5785',    sex:'man',    hobby:'program'};var d = JSON.stringify(data);storage.setItem("data",d);//将JSON字符串转换成为JSON对象输出var json = storage.getItem('data');var jsonObj = JSON.parse(json);console.log(typeof jsonObj);
复制代码


打印出来是Object对象。



需要注意的是,JS数组本质上也是对象类型,所以上面的代码对数组也是适用的。


var arra = [1,2,3,4];localStorage.setItem('key',JSON.stringify(arra));var read=JSON.parse(localStorage.getItem('key'));console.log(read,read.length);
复制代码


溢出处理


try {  localStorage.setItem(key,value);} catch(oException) {  if (oException.name == 'QuotaExceededError') {    console.log('已经超出本地存储限定大小!');     // 可进行超出限定大小之后的操作,如下面可以先清除记录,再次保存    localStorage.clear();    localStorage.setItem(key,value);  }}
复制代码


发布于: 3 小时前阅读数: 4
用户头像

华强

关注

No Silver Bullet 2021.07.09 加入

岂曰无衣 与子同袍

评论

发布
暂无评论
Vue进阶(幺玖肆):localStorage应用总结