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

A false Variable Doesn't Validate as false

我无法理解代码中的一些奇怪行为,我想知道是否有人可以告诉我我做错了什么?

我有一个布尔变量 isWaiting,它在 localStorage 中保存为 false,当它被检索时,它显示为 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 = false

Is isWaiting False? true

产生:

isWaiting = false

Is isWaiting False? false ⬅ This is clearly wrong, so why is this happening?

我做错了什么? false 的布尔值是否在 localStorage 过程中以某种方式被破坏,如果是,我将如何解释它,如果不是,那是什么问题?


解决方案 Update:10/09/18

基于帮助我确认我对 LS 进程正在屠杀值类型的怀疑确实是正确的,更具体地说,@bhojendra-rauniyar 提供的解决方案,我已经更改了代码以更正类型

在检索的那一刻,然后在整个代码中正常处理它,避免添加大量代码,它似乎已经成功了,感谢大家的帮助。

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

本地存储以字符串形式存储值。所以,即使你使用 Boolean('false') 也会 return 为真。因为它不是空字符串。字符串中任何有价值的东西都是 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

localstorage 将值设置为字符串。 在你的例子中 布尔值(isWaiting === false)-> false 但如果你检查 Boolean(isWaiting === 'false') -> 这会给你 true

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