如果永远不会执行,即使它是真的

时间:2018-01-16 23:56:36

标签: javascript html

我对这个全局变量有疑问。它永远不会执行If语句,即使它是真的。

HTML:

<p onclick="change(this)">Click</p>
<p onclick="change2(this)">Click</p>

JavaScript的:

var status = false;
localStorage.setItem("status", status);

function change(obj) {
    var status = localStorage.getItem("status");
    var status = true;
    localStorage.setItem("status", status);
}

function change2(obj) {
    var status = localStorage.getItem("status");
    alert(status)
    if (status == true) {
        alert("The code works");
    } else {
        alert("The code doesn't work");

警报(状态)返回true,但在此之后,我得到&#34;代码不起作用&#34;。我对这个问题感到很困惑。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:5)

来自documentation

localStorage.setItem("status", status);

DOMString作为键和值添加为UTF-16字符串。

  

的keyName

     

包含您要创建/更新的密钥名称的DOMString。

     

的keyValue

     

包含您想要提供密钥的值的DOMString   创建/更新。

由于JavaScript已经使用了这样的字符串,因此直接映射DOMString 到字符串

所以你在这里比较一个String和boolean

if (status == true) {

相当于:

if ("true" == true) {

在数字转换后falseNaN进行比较时评估为1true可转换为number

因此,您可以比较字符串:

if (status === "true") {

答案 1 :(得分:0)

在函数中使用var status,您将在函数中创建一个名为status的本地范围变量,而不是修改您在文件顶部创建的全局范围变量。

只需从作业中删除var