我对javascript运营商非常困惑。看看这个:
localStorage.setItem('isValidUserCpf', false);
alert(localStorage.getItem('isValidUserCpf'));
alert(!localStorage.getItem('isValidUserCpf'));
alert(!(localStorage.getItem('isValidUserCpf')));
if (localStorage.getItem('isValidUserCpf') == false){
alert('notEntering');
}
为什么所有警报都打印“假”?为什么我的条件不起作用?我真的不知道我的问题是什么。
感谢。
答案 0 :(得分:2)
您只能在本地存储中存储字符串,因此当您尝试存储false
时,它会转换为字符串"false"
。
您的第一个警报显示此字符串。其他显示此字符串应用于非运算符(!"false" === false
),并将false值转换为字符串并显示在警报中。
您可以做的是序列化数据以将其存储在localstorage
中localStorage.setItem('isValidUserCpf', JSON.strinify(false));
var isValidUserCpf = localStorage.getItem('isValidUserCpf');
alert(isValidUserCpf);
alert(JSON.parse(isValidUserCpf));
alert(!JSON.parse(isValidUserCpf));
if (isValidUserCpf == false){
alert('notEntering');
}
答案 1 :(得分:1)
localStorage.setItem('isValidUserCpf', false);
false
存储为字符串。
alert(localStorage.getItem('isValidUserCpf'));
使用字符串值"false"
alert(!localStorage.getItem('isValidUserCpf'));
使用布尔值!"false"
进行提醒,布尔值<{1}}也是布尔值
false
与上述相同
请用
进行测试alert(!(localStorage.getItem('isValidUserCpf')));
你会看到“true”,false,false
我不确定您正在测试的环境,您可以看到localStorage.setItem('isValidUserCpf', true);
与localStorage
的价值
答案 2 :(得分:1)
本地存储的键和值是由standard定义的字符串。当计算为布尔值时,非空字符串为true
,因此否定它将导致false
结果。类似地,字符串“false”与布尔false
不同。如果您更改条件以比较字符串,它将按照您的预期进行评估 - 在http://jsfiddle.net/79pF5/
if (localStorage.getItem('isValidUserCpf') === 'false') {
alert('notEntering');
}