Gµå*_*ïåñ 2 javascript logical-operators local-storage
我无法理解代码中的一些奇怪的行为,我想知道是否有人能告诉我我做错了什么?
我有一个布尔变量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));
})()
Run Code Online (Sandbox Code Playgroud)
isWaiting = false
是假的吗?真正
isWaiting = false
是假的吗?false⬅ 这显然是错的,为什么会发生这种情况呢?
我究竟做错了什么?错误的布尔值是否会在某个localStorage过程中被破坏,如果是这样,我将如何解释它,如果没有,那么什么是错的?
基于那种答复帮助我确认,确实我的怀疑是,LS过程屠宰值类型是正确的,更具体地@提供的解决方案bhojendra-rauniyar,我已经改变了代码,以纠正检索时刻的类型权然后在整个代码中正常处理它,避免添加大量代码,似乎已经完成了这个技巧,谢谢大家的帮助.
...
var isWaiting = Boolean(JSON.parse(localStorage.getItem("isWaiting")));
...
Run Code Online (Sandbox Code Playgroud)
本地存储将值存储在字符串中.所以,即使你使用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)
| 归档时间: |
|
| 查看次数: |
45 次 |
| 最近记录: |