javascript null比较不同的chrome和firefox

时间:2012-07-15 03:05:27

标签: javascript session-storage

我有以下代码:

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

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

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

感谢您的帮助。

3 个答案:

答案 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
}

!truea时,运营商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