0

我有以下代码:

var a=sessionStorage.getItem("Token");  
alert(a==null);

返回值是null(如果我alert(a)显示null)。问题是alert(a==null)在 Firefox 上显示为 TRUE,在 safari 和 chrome 上显示为 FALSE。什么?我已经尝试a===null过相同的结果以及!a。

我做错了什么或我不知道什么?

谢谢你的帮助。

4

3 回答 3

7

您在评论中说:“我将 Token 设置为 sessionStorage.setItem("Token",null);

我认为问题在于您应该使用会话存储来存储字符串。当您传递nullsetItem()它时,它会将其转换为 string "null"。然后,当您检索它时,getItem()您会得到这个字符串"null",它当然不等于实际null值。

你可以在这里看到这种行为:http: //jsfiddle.net/CWVww/1/

如果要删除以前设置的项目,请执行以下操作:

sessionStorage.removeItem("Token");

...然后调用 to.getItem("Token")将返回null.

我不知道为什么 Firefox 的行为不同。来自会话存储的 MDN 页面“请记住,您存储在此页面中描述的任何存储中的所有内容在存储之前都会使用其 .toString 方法转换为字符串。”

于 2012-07-15T05:47:26.350 回答
1

您的代码与我完美配合(在 Chrome 上测试)。但是,我建议您使用!运算符并检查当前值的类型:

var a = sessionStorage.getItem("Token");
if(!a && typeof a!=='string'){        //a doesn't exist
    //Do something
}else{        //a does exist
    //Do something
}

运算符!将返回truewhen aisnullundefined

于 2012-07-15T03:16:45.320 回答
0

你可以试试String(a) == "null"。但是,如果Token项目的值设置为"null"(字符串"null"),则代码将无法按预期工作,因此我们必须添加另一个条件:

var a = sessionStorage.getItem("Token");
if(String(a)==="null" && typeof a!=="string"){        //a doesn't exist
    //Do something
}else{        //a does exist
    //Do something
}

这样,当 is 的“字符串化”值且 var 的类型不是时,条件a将返回"null"trueastring

于 2012-07-15T03:15:45.067 回答