当前位置: 首页 > news >正文

web前端面试题附答案041 - 曾经一个百度面试官问我,localStorage可以存对象吗?

曾经一个百度面试官问我,localStorage可以存对象吗?

        很显然 ,localStorage这5M的存储虽然有限,但对于前端这点数据量来说,大部分情况几乎是无所不能存了。你说你有个全局变量,全局对象,想怎么存怎么存,但对于刚接触的同学来说,似乎有点模糊,面试官这是啥意思,是比较高深的用法吗?

        1、先存一个数值型看看

<script>
   let a = 100;
   window.localStorage.setItem('my', a);
   let getA = window.localStorage.getItem('my');
   console.log('-----', getA);  // 100
 </script>

        最初大家可能都是这么用的,我有一个值,数值型的,然后存到localStorage里,初次使用感觉真的太好用了,比cookie好用一万倍。把值存起来,也不用自己封装cookie的方法,这么一个小API想用就用。但取出来使用的时候,总感觉哪里不对,怪怪的,用着用着就不对了。例如这样

<script>
   let a = 100;
   window.localStorage.setItem('my', a);
   let getA = window.localStorage.getItem('my');
   console.log('-----', getA);
   let b = getA + 5;
   console.log('===', b); // 1005
</script>

        我原本是希望输出105的,谁知道成了1005,这明显是变成了字符串拼接

        2、存一个null或者undefined值进去试试

        我原本定义了一个undefined值,存进localStorage里,当我某一天取出来,想用来做判断使用的,谁知道连undefined也变态了

<script>
  let a = null;
  let b = undefined;
  window.localStorage.setItem('mya', a);
  window.localStorage.setItem('myb', b);

  let getA = window.localStorage.getItem('mya');
  let getB = window.localStorage.getItem('myb');
  if (!getB) {
      console.log('---展开程序人生--');
  } else {
      console.log(typeof(getB)); // string
      console.log('---糟了 undefined 变了--');
   }
</script>

        是不是发现很讨厌,数值型变了,拿出来想使用得将字符串类型改为数值型,存个undefined也变成了字符串类型,那么如果存个对象呢,几乎就不用试了,肯定也是字符串类型了。所以,都要提前预备好类型转换的对应方法,否则直接拿来用就会出现问题。

        这就是使用localStorage的有点与缺点了吧。

        总结:

        面试官这个问题问的很好,能存对象吗?当然可以,只不过是以另外一种形势存起来了而已。看这个回答是不是很牛叉!!!

相关文章:

  • 【Linux学习】权限
  • 基于AT89C51单片机的直流数字电压表设计
  • 脚本控制向Android模拟拨打电话,发送短信,定位设置功能
  • 深度理解微服务
  • 在 ABAP 开发工具运行时错误显示界面里植入思否猫
  • Matlab激光雷达相机联合标定经验分享
  • JVM<二>JVM调优(你想要的调优都在这里了)
  • Flowable监听器动态调用Springcloud接口
  • 数字电路和模拟电路-3二极管与三极管、基本逻辑运算
  • 机器学习——BP神经网络详细介绍及案例Python代码实现
  • 了解如何通过 UltraEdit丨UEStudio 中的窗口停靠系统显示、控制和配置文件选项卡
  • Flutter SDK 自带的 10 个最有用的 Widget
  • 计算机网络-应用层篇-HTTP协议
  • Kafka 认证二:ScramLoginModule 认证及 Java 连接测试
  • 1024程序员节主题征文 | 程序员节节日祝福语大全
  • [nginx文档翻译系列] 控制nginx
  • 【Linux系统编程】快速查找errno错误码信息
  • 03Go 类型总结
  • Invalidate和postInvalidate的区别
  • java小心机(3)| 浅析finalize()
  • nodejs调试方法
  • SpringCloud集成分布式事务LCN (一)
  • Xmanager 远程桌面 CentOS 7
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 欢迎参加第二届中国游戏开发者大会
  • 码农张的Bug人生 - 见面之礼
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 实习面试笔记
  • 用element的upload组件实现多图片上传和压缩
  • 最简单的无缝轮播
  • Java性能优化之JVM GC(垃圾回收机制)
  • 阿里云ACE认证学习知识点梳理
  • 带你开发类似Pokemon Go的AR游戏
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (Note)C++中的继承方式
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (十)T检验-第一部分
  • (四) Graphivz 颜色选择
  • (一)为什么要选择C++
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转载)虚函数剖析
  • *2 echo、printf、mkdir命令的应用
  • .Family_物联网
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .net打印*三角形
  • .net和jar包windows服务部署
  • .NET开发人员必知的八个网站
  • @JsonSerialize注解的使用
  • @vue/cli脚手架