我有以下代码:
var a=sessionStorage.getItem("Token");
alert(a==null);
返回的值为null
(如果我alert(a)
则显示null
)。问题是在Firefox上alert(a==null)
显示为TRUE,在safari和chrome上显示为FALSE。 WTH?我尝试过a===null
同样的结果以及!a。
我做错了什么或我不知道什么?
感谢您的帮助。
答案 0 :(得分:7)
你在评论中说:“我设置了令牌 sessionStorage.setItem("Token",null);
”
我认为问题在于您应该使用会话存储来存储字符串。当您将null
传递给setItem()
时,会将其转换为字符串"null"
。然后,当您使用getItem()
检索它时,您会收到此字符串"null"
,这当然不等于实际的null
值。
您可以在此处看到此行为:http://jsfiddle.net/CWVww/1/
如果您要删除之前设置的项目,请执行以下操作:
sessionStorage.removeItem("Token");
... 然后对.getItem("Token")
的调用将返回null
。
我不知道为什么Firefox表现不同。来自MDN page on session storage:“请记住,存储在此页面中描述的任何存储中的所有内容在存储之前都会使用其.toString方法转换为字符串。”
答案 1 :(得分:1)
您的代码与我完美配合(在Chrome上测试)。但是,我建议您使用!
运算符,并检查当前值的类型:
var a = sessionStorage.getItem("Token");
if(!a && typeof a!=='string'){ //a doesn't exist
//Do something
}else{ //a does exist
//Do something
}
当!
为true
或a
时,运营商null
将返回undefined
。
答案 2 :(得分: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
}
这样,当a
的“字符串化”值为"null"
且a
var的类型不是string