我在理解代码中的某些奇怪行为时遇到麻烦,我想知道是否有人可以告诉我我做错了什么?
我有一个布尔变量isWaiting
,它在false
中另存为localStorage
,检索时它显示为false
,但是当您进行验证时,它不会那样看。这是一个复制我的问题的小代码:
(function(){
localStorage.setItem("isWaiting", false);
var isWaiting = localStorage.getItem("isWaiting");
console.log("isWaiting = " + isWaiting)
console.log("Is isWaiting False? " + Boolean(isWaiting === false));
// I have tried it as this as well
console.log("Is isWaiting False? " + (isWaiting === false));
})()
isWaiting =假
正在等待吗?是
isWaiting = false
正在等待吗?错误⬅这显然是错误的,为什么会这样?
我在做什么错?假的布尔值是否在localStorage
流程中被弄乱了,如果是的话,我将如何解释呢?如果没有,那怎么了?
基于这种帮助我确认LS流程正在屠杀值类型的怀疑是正确的,更具体地说,是@ bhojendra-rauniyar提供的解决方案,我更改了代码以更正该类型。检索的那一刻,然后在整个代码中按正常方式进行处理,避免了添加大量代码,而且似乎已经成功完成了,谢谢大家的帮助。
...
var isWaiting = Boolean(JSON.parse(localStorage.getItem("isWaiting")));
...
答案 0 :(得分:5)
本地存储将值存储在字符串中。因此,即使您使用Boolean('false')
也将返回true。因为它不是空字符串。字符串中具有值的任何内容都应为true
。要解决此问题,您可以使用:
Boolean(JSON.parse('false')) // false
Boolean(JSON.parse('true')) // true
因此,您可以这样做:
Boolean(JSON.parse(isWaiting))
或者,您也可以将其与字符串进行比较:
String(false) === 'false' // true
因此,使用:
console.log(String(isWaiting)) // will return false
答案 1 :(得分:1)
localstorage将值设置为字符串。
在你的例子中
布尔值(isWaiting ===假)->假
但是如果你检查
Boolean(isWaiting === 'false')
->这将使您成真
答案 2 :(得分:0)
LocalStorage会将值保存在字符串中,并且您不能将字符串与布尔值进行比较。因此,您需要像这样进行比较:
(function(){
localStorage.setItem("isWaiting", false);
var isWaiting = localStorage.getItem("isWaiting");
console.log("isWaiting = " + isWaiting)
console.log("Is isWaiting False? " + Boolean(isWaiting === 'false'));
// I have tried it as this as well
console.log("Is isWaiting False? " + (isWaiting === 'false'));
})()