localStorage存储bool值,读取之后变字符串类型

今天遇到一个问题,其他的页面查询接口返回的一个参数,bool值,用来判断当前用户是否能购买特定商品,最开始想到的是,吧其他的页面接口返回的数据放到本地存储中去,在另外一个页面拿出来进行判断,决定前端是否能够购买的交互逻辑。
在存储好之后,在读取的时候,发现了bool变成了字符串类型,所以使用

if(localStorage.getItem('isTrue')){

}

这种方法判断,从本地存储读取出来的数据是字符串类型的 true/false,所以,不论true/false都是true ,显然不能用这种方法。(pc端)但是我使用uniapp,使用uni.setStorageSync()和uni.getStorageSync()在h5上试了一下,返回的bool值。
对于pc端,解决的办法是使用:eval()

	var isTrue = false;
	localStorage.setItem('isTrue',isTrue)
	console.log(localStorage.getItem('isTrue'))
	console.log(typeof localStorage.getItem('isTrue'))//string
	console.log(typeof eval(localStorage.getItem('isTrue')))//boolean`

当然最后我还是没有使用locaStorage方式来存储bool值,因为这个值相对来说是敏感值,不可以直接放到本地存储中,很容易被懂技术的人员,在本地存储中修改这个值,从而造成安全隐患。
下面是我写的demo:

  <button>购买</button>


var btnDom = document.getElementsByTagName('button')[0]
var isTrue = false;
localStorage.setItem('isTrue',isTrue)
var isShow = eval(localStorage.getItem('isTrue'))//写在这里,页面只加载一次,再次修改本地存储值,不会影响已经执行过的代码全局变量值
btnDom.addEventListener('click',function(e){
  // var isShow = eval(localStorage.getItem('isTrue'))//这里做判断在手动被别人修改本地存储值后,会影响下面程序的执行,弹出可以购买
  if(isShow){
    alert('可以购买')
  }else{
    alert('不能购买')
  }
})

eval():
eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。
eval()函数可以把字符串当做一个语句去执行,这样有一个弊端:比如:字符串中含有删除文件的语句。那就危险了,所以使用要谨慎。
localStorage局限性

1、浏览器的大小不统一,并且在 IE8 以上的 IE 版本才支持 localStorage 这个属性。
2、目前所有的浏览器中都会把localStorage的值类型限定为string类型,这个在对我们日常比较常见的JSON对象类型需要一些转换。
3、localStorage在浏览器的隐私模式下面是不可读取的。
4、localStorage本质上是对字符串的读取,如果存储内容多的话会消耗内存空间,会导致页面变卡。
5、localStorage不能被爬虫抓取到。
localStorage 与 sessionStorage 的唯一一点区别就是 localStorage 属于永久性存储,而 sessionStorage 属于当会话结束的时候,sessionStorage 中的键值对会被清空。
6、存储过多数据会导致页面变卡,因为localStorage的本质是对字符串的读取
7、不要存储敏感信息
tips
不同浏览器无法共享localStorage,相同浏览器的不同页面间可以共享相同的 localStorage(页面属于相同域名和端口),但是不同页面或标签页间无法共享sessionStorage的信息。这里需要注意的是,页面及标 签页仅指顶级窗口,如果一个标签页包含多个iframe标签且他们属于同源页面,那么他们之间是可以共享sessionStorage的。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值