转 localStorage

    xiaoxiao2021-03-25  136

    码农一生

    talk is cheap,show me the code

    博客园首页新随笔联系订阅管理 随笔 - 47   文章 - 19   评论 - 186

    localStorage使用总结

    一、什么是localStorage、sessionStorage

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

     

    二、localStorage的优势与局限

    localStorage的优势

    1、localStorage拓展了cookie的4K限制

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

    localStorage的局限

    1、浏览器的大小不统一,并且在IE8以上的IE版本才支持localStorage这个属性

    2、目前所有的浏览器中都会把localStorage的值类型限定为string类型,这个在对我们日常比较常见的JSON对象类型需要一些转换

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

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

    5、localStorage不能被爬虫抓取到

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

    这里我们以localStorage来分析

     

    三、localStorage的使用

    localStorage的浏览器支持情况:

    这里要特别声明一下,如果是使用IE浏览器的话,那么就要UserData来作为存储,这里主要讲解的是localStorage的内容,所以userData不做过多的解释,而且以博主个人的看法,也是没有必要去学习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就是相当于一个前端的数据库的东西,数据库主要是增删查改这四个步骤,这里的读取和写入就相当于增、查的这两个步骤

    下面我们就来说一说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:'xiecanyong', sex:'man', hobby:'program' }; var d=JSON.stringify(data); storage.setItem("data",d); console.log(storage.data); }

     

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

    var storage=window.localStorage; var data={ name:'xiecanyong', 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对象

    另外还有一点要注意的是,其他类型读取出来也要进行转换

     

    分类:  HTML5, 流行前端技术 标签:  教程,  笔记,  HTML5,  前端,  工作总结,  localStorage 好文要顶  关注我  收藏该文    谢灿勇 关注 - 111 粉丝 - 145 +加关注 8 0 « 上一篇: 个人开发项目预览(持续更新) » 下一篇: 2016年6月前端工作笔记 posted @  2016-06-26 13:12  谢灿勇 阅读( 23111) 评论( 1)  编辑  收藏 评论列表    #1楼   2017-02-09 20:16  大水哥    学习了 支持(0) 反对(0) 刷新评论 刷新页面 返回顶部 注册用户登录后才能发表评论,请  登录 或  注册, 访问网站首页。 【推荐】50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库 【集赞】参与H3BPM 朋友圈集赞活动,豪礼任性选 【推荐】Google+GitHub联手打造前端工程师课程 最新IT新闻: ·  百度、搜狗未尽广告发布法律义务被处罚 ·  三星李在镕案今日下午开审 否认检方所有指控 ·  阿里在美国投资的移动搜索引擎Quixey面临倒闭 ·  分期乐最快今年赴美IPO 融资约6亿美元 ·  刘庆峰:今年AI将迎来分水岭,不再忽悠概念,应用效果见分晓! »  更多新闻... 最新知识库文章: ·  垃圾回收原来是这么回事 ·  「代码家」的学习过程和学习经验分享 ·  写给未来的程序媛 ·  高质量的工程代码为什么难写 ·  循序渐进地代码重构 »  更多知识库文章...

    公告

    昵称: 谢灿勇 园龄: 2年 粉丝: 145 关注: 111 +加关注 < 2017年3月 > 日 一 二 三 四 五 六 26 27 28123 4 5678 910 11 121314151617 18 192021222324 25 262728293031 1 2 3 4 5 6 7 8

    搜索

       

    常用链接

    我的随笔我的评论我的参与最新评论我的标签

    我的标签

    JavaScript(13)教程(12)前端(10)HTML5(10)笔记(6)总结(6)工作总结(6)作品(5)精讲(5)插件(5)更多

    随笔分类(72)

    ASP技术C#技术HTML5(11)jQuery(4)jQuery Easy UI教程(2)node系列文章(1)PHP(2)SEO教程(1)web工具(5)电商系列(1)流行前端技术(8)深入学习JavaScript(9)手把手教你学PS(1)网络安全(4)网页布局(6)项目经验(11)页面图片设计与视频处理(1)杂文(3)在线工具(1)正则表达式(1)

    随笔档案(47)

    2017年3月 (1)2017年2月 (1)2016年12月 (3)2016年11月 (5)2016年10月 (3)2016年9月 (2)2016年8月 (2)2016年7月 (3)2016年6月 (1)2016年5月 (4)2016年4月 (6)2016年3月 (5)2016年2月 (3)2016年1月 (6)2015年12月 (2)

    文章档案(18)

    2016年12月 (1)2016年4月 (1)2016年3月 (14)2016年1月 (2)

    相册(4)

    博客素材(1)女神素材(3)

    积分与排名

    积分 - 56697 排名 - 4595

    最新评论

    1. Re:flex布局应用与踩坑 支持支持 --牛腩 2. Re:vue.js+boostrap最佳实践 @1090596945不用客气,刚刚好在线... --谢灿勇 3. Re:vue.js+boostrap最佳实践 @谢灿勇感谢你的回复,后来我突然发现是我的vue版本的问题!!!谢谢... --1090596945 4. Re:vue.js+boostrap最佳实践 @1090596945同学最后又源码下载,你下载一下源码对比一下看看... --谢灿勇 5. Re:vue.js+boostrap最佳实践 我想问一下我为什么按照你的代码打了以后报错了报错提示是:(unknown) [Vue warn]: failed to compile template:vue没有解析到那个div --1090596945 6. Re:web响应式图片设计实现 @恺悌君子软件录制的... --谢灿勇 7. Re:程序猿教你学剪辑 支持支持 --牛腩 8. Re:前端跨域的那些事 mark --沙海胡杨 9. Re:前端数据可视化echarts.js使用指南 mark --沙海胡杨 10. Re:程序猿教你学剪辑 从去年底到现在也玩了一段Premiere了,主要用来剪一些游戏视频上传到优酷和B站,看到楼主的最后一段话,想告诉楼主一点经验,即便没有优酷会员也可以转码为超清,取决于你的分辨率是否大于720p,编码方...... --LowerAI

    阅读排行榜

    1. localStorage使用总结(23111)2. 端口扫描之王——nmap入门精讲(一)(12148)3. vue.js+boostrap最佳实践(9232)4. 前端数据可视化echarts.js使用指南(4518)5. 要么庸俗,要么孤独(2947)6. 基于canvas实现物理运动效果与动画效果(一)(2859)7. 手机网页布局经验总结(2826)8. 前端人员一定要掌握的PS技巧(2761)9. 基于Bootstrap仿淘宝分页控件实现(2610)10. 分享一次失败的项目实践经验(1548)

    评论排行榜

    1. 要么庸俗,要么孤独(38)2. vue.js+boostrap最佳实践(21)3. 基于Bootstrap仿淘宝分页控件实现(14)4. 最好用的技术是最基础的(12)5. jQuery 插件编程精讲与技巧(11)6. 手把手教你做手机婚恋网(10)7. 手机网页布局经验总结(10)8. 基于canvas实现物理运动效果与动画效果(一)(9)9. 前端人员一定要掌握的PS技巧(8)10. 前端数据可视化echarts.js使用指南(7)

    推荐排行榜

    1. vue.js+boostrap最佳实践(32)2. 手机网页布局经验总结(15)3. 基于Bootstrap仿淘宝分页控件实现(14)4. 要么庸俗,要么孤独(10)5. JavaScript事件流原理解析(9)6. jQuery 插件编程精讲与技巧(9)7. 基于canvas实现物理运动效果与动画效果(一)(8)8. 前端数据可视化echarts.js使用指南(8)9. localStorage使用总结(8)10. 手把手教你做手机婚恋网(7) Copyright ©2017 谢灿勇
    转载请注明原文地址: https://ju.6miu.com/read-14670.html

    最新回复(0)