false变量不会验证为false

Gµå*_*ïåñ 2 javascript logical-operators local-storage

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

我有一个布尔变量isWaiting,并将其保存为falselocalStorage,当它被检索到,它显示为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));
})()
Run Code Online (Sandbox Code Playgroud)

应得:

isWaiting = false

是假的吗?真正

生产:

isWaiting = false

是假的吗?false⬅ 这显然是错的,为什么会发生这种情况呢?

我究竟做错了什么?错误的布尔值是否会在某个localStorage过程中被破坏,如果是这样,我将如何解释它,如果没有,那么什么是错的?


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

基于那种答复帮助我确认,确实我的怀疑是,LS过程屠宰值类型是正确的,更具体地@提供的解决方案bhojendra-rauniyar,我已经改变了代码,以纠正检索时刻的类型权然后在整个代码中正常处理它,避免添加大量代码,似乎已经完成了这个技巧,谢谢大家的帮助.

...
    var isWaiting = Boolean(JSON.parse(localStorage.getItem("isWaiting")));
...
Run Code Online (Sandbox Code Playgroud)

Bho*_*yar 5

本地存储将值存储在字符串中.所以,即使你使用Boolean('false')将返回true.因为它不是空字符串.任何有字符串值的东西都是true.要解决这个问题,您可以使用:

Boolean(JSON.parse('false')) // false
Boolean(JSON.parse('true')) // true
Run Code Online (Sandbox Code Playgroud)

所以,你可以这样做:

Boolean(JSON.parse(isWaiting))
Run Code Online (Sandbox Code Playgroud)

或者,您也可以与字符串进行比较:

String(false) === 'false' // true
Run Code Online (Sandbox Code Playgroud)

所以,使用:

console.log(String(isWaiting)) // will return false
Run Code Online (Sandbox Code Playgroud)