最近面试的时候关于html5API总会被问到localStorage的问题, 对于一般的问题很简单,无非就是

  • localStorage、sessionStorage和cookie这三个客户端缓存的区别

  • localStorage的API,getItem,setItem,clear等等

  • localStorage存取数据是以字符串的形式,最大容量是5M

上面的三个问题大部分同学都可以回答出来,那么,面试官的问题来了:

字符串最大容量是5M,那么我如果存储容量溢出了怎么办?

其实这个5M对于不同浏览器来说也是不确定的,不过大体上是一个5M的范围,溢出了怎么办,肯定会发生错误啊。浏览器会报一个名为“QuotaExceededError”的错误,如下图:

最后一次溢出的字符串是会存储到最大容量停止还是不会存储?

正常情况下,可能不会存储5M的字符串,但是也不能保证浏览器日积月累的情况下,恰巧用户也没清理过缓存,那么当最后容量接近5M的时候,我们再存储一个字符串进去的时候会发生错误,发生错误的字符串是存了一半?还是压根就没存呢?答案是---没存。下面是我写的一个demo,最后发现报错的时候刷新浏览器,localStorage的当前容量为发生变化。

既然存在安全问题,那么localStorage的使用就不是绝对安全的,如何更安全的使用localStorage?

前端的安全性是十分重要的一个话题,因为我们直接与用户打交道,你的程序在前端发生不可预知的错误是一定要避免的。因此这种不安全的API,我们需要找到解决办法,下面是我的一个解决办法(可能不是最优解,但是可行)。

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

面试官一波素质三连!对于只是会使用localStorage的同学来说,肯定是不得其解的。其实这也是很多同学准备面试的时候因该考虑的问题,或者说应该主攻的方向(虽然我才毕业,但是自身遇到的问题总结出来希望对大家有帮助)。在学习知识时,懂得使用固然重要,但是如果想熟练掌握一个知识点,必须更加深刻的挖掘才可以。

Demo地址:https://github.com/zhoudeyou9...
前端小白,第一次发文,决心把自己的学习成长过程写下来,欢迎批评指正o( ̄︶ ̄)o

关于localStorage面试的那点事的更多相关文章

  1. 作为java应届生,面试求职那点事

    找工作两星期多了.心情不爽,写点记录打发时间. 嘘~~自己的破事:  刚毕业,也过了实习,本理所应当的留在公司转正.可是为了谈了两年的女朋友回家见面.一切都顺利进行,妈妈也开心给了一万见面礼,一切都以 ...

  2. 突然心血来潮,想写写我在java面试中遇到的事。作为一个应届生,我觉得我的情况都与大部分应届生是差不多的,希望你们能在这上面得到一些有用的

    面试过程吧,怎么说呢?从一开始接触面试到现在成功了几家,这中间我确实收获了许多,那我就从我第一次面试开始讲吧. 第一次面试是有人介绍过来的,总之还是有一位贵人相助,所以第一次面试时,面试官很好没有怎么 ...

  3. [oldboy-django][4python面试]有关yield那些事

    1 yield 在使用send, next时候的区别(举例m = yield 5) 无论send,next首先理解m = yield 5 是将表达式"yield 5 "的结果返回给 ...

  4. 聊一聊FE面试那些事

    聊一聊FE面试那些事 最近公司由于业务的扩展.技术的延伸需要招一批有能力的小伙伴加入,而我有幸担任"技术面试官"的角色前前后后面试了不下50多位候选人,如同见证了50多位前端开发者 ...

  5. 聊一聊FE面试那些事【原创】

    最近公司由于业务的扩展.技术的延伸需要招一批有能力的小伙伴加入,而我有幸担任"技术面试官"的角色前前后后面试了不下50多位候选人,如同见证了50多位前端开发者的经历一样,在面试的过 ...

  6. 【理论面试篇】收集整理来自网络上的一些常见的 经典前端、H5面试题 Web前端开发面试题

    ##2017.10.30收集 面试技巧 5.1 面试形式 1)        一般而言,小公司做笔试题:大公司面谈项目经验:做地图的一定考算法 2)        面试官喜欢什么样的人 ü  技术好. ...

  7. 阿里 IOS 面试官教你在面试中脱颖而出

    前言: 知己知彼.百战不殆,面试也是如此. 只有充分了解面试官的思路,才能更好地在面试中充分展现自己. 今天,阿里高级技术专家将分享自己作为面试官的心得与体会.如果你是面试者,可以借此为镜,对照发现自 ...

  8. 从谷歌面试翻车到offer收割的心路历程

    首先声明,这只是我的播客随感,其中无法避免有一些个人色彩的见解,请不要在意,我尊敬任何的互联网公司,尊敬研究生期间的老师同学,我只希望给在求学路上的CS同学一些启发. 先介绍一下背景,我是ACM铜牌退 ...

  9. 历经70+场面试,我发现了大厂面试的bug,并总结其中心得

    想起了学弟在去年秋招时面试了50余家,加上暑期实习面试了20余家,加起来也面试了70余场. 基本把国内有名的互联网公司都面了一遍,不敢说自己的面试经验很丰富,但也是不差的. 这次专门把大厂的面试做了个 ...

随机推荐

  1. diary-2019.9.16

    It has been observed by various scientists and nutritionists that it is better to have smaller and a ...

  2. day23-logging模块

    # logging日志记录的两个内容:1.有5种级别的日志记录模式.2.两种配置方式:basicconfig.logger对象. # logging的作用: #1.排错的时候需要打印很多细节来帮助排错 ...

  3. github简单操作

    配置用户名: git config --global user.name 名.姓 配置用户邮件:git config --global user.email 名.姓@avatarmind.com 查看 ...

  4. TreeMap简介

    在Map集合框架中,除了HashMap以外,TreeMap也是常用到的集合对象之一.与HashMap相比,TreeMap是一个能比较元素大小的Map集合,会对传入的key进行了大小排序.其中,可以使用 ...

  5. springboot学习笔记:5.spring mvc(含FreeMarker+layui整合)

    Spring Web MVC框架(通常简称为"Spring MVC")是一个富"模型,视图,控制器"的web框架. Spring MVC允许你创建特定的@Con ...

  6. ArcGIS Server10.2忘记密码怎么办?重置ArcGIS Server Manager密码

    忘记了ArcGIS Server Manager的密码不要慌张,下面简单的几步就可以重置密码. 第一步:找到ArcGIS Server的安装目录,然后找到..\ArcGIS\Server\tools\ ...

  7. [LC] 55. Jump Game

    Given an array of non-negative integers, you are initially positioned at the first index of the arra ...

  8. Qt QImag图像保存、格式转换

    图像保存bool QImage::save(const QString &fileName, const char *format = Q_NULLPTR, int quality = -1) ...

  9. whip|resist|patch|intimate|

    a piece of leather or rope that is fastened to a stick, used for hitting animals or people 鞭子,皮鞭 She ...

  10. 小码哥哥 FastJson--阿里巴巴公司开源的速度最快的Json和对象转换工具

    转载地址:http://www.oschina.net/code/snippet_228315_35122?_t_t_t=0.4667952097048127 class User{ private ...