不是运营商没有处理我的JavaScript代码

时间:2014-01-30 03:20:53

标签: javascript cordova

我对javascript运营商非常困惑。看看这个:

localStorage.setItem('isValidUserCpf', false);


    alert(localStorage.getItem('isValidUserCpf'));
    alert(!localStorage.getItem('isValidUserCpf'));
    alert(!(localStorage.getItem('isValidUserCpf')));

    if (localStorage.getItem('isValidUserCpf') == false){
        alert('notEntering');
    }

为什么所有警报都打印“假”?为什么我的条件不起作用?我真的不知道我的问题是什么。

感谢。

3 个答案:

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

https://developer.mozilla.org/en/docs/JSON

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