错误的变量不会验证为错误

时间:2018-10-09 03:38:10

标签: javascript local-storage logical-operators

我在理解代码中的某些奇怪行为时遇到麻烦,我想知道是否有人可以告诉我我做错了什么?

我有一个布尔变量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流程中被弄乱了,如果是的话,我将如何解释呢?如果没有,那怎么了?


解决方案更新:18/09/10

基于这种帮助我确认LS流程正在屠杀值类型的怀疑是正确的,更具体地说,是@ bhojendra-rauniyar提供的解决方案,我更改了代码以更正该类型。检索的那一刻,然后在整个代码中按正常方式进行处理,避免了添加大量代码,而且似乎已经成功完成了,谢谢大家的帮助。

...
    var isWaiting = Boolean(JSON.parse(localStorage.getItem("isWaiting")));
...

3 个答案:

答案 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'));
})()