chrome和firefox上的javascript null比较不同

javascript null comparison different on chrome and firefox

本文关键字:比较 null javascript firefox 上的 chrome      更新时间:2023-09-26

我有以下代码:

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

返回的值为null(如果I为alert(a),则显示null)。问题是alert(a==null)在firefox上显示为TRUE,在safari和chrome上显示为FALSE。WTH?我试过a===null,结果也一样!a.

我做错了什么,或者我没有意识到什么?

谢谢你的帮助。

您在评论中说:"我用sessionStorage.setItem("Token",null);设置令牌"

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

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

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

sessionStorage.removeItem("Token");

并且则对CCD_ 13的调用将返回CCD_。

我不知道为什么Firefox会有不同的表现。从会话存储的MDN页面:"请记住,存储在本页面中描述的任何存储中的所有内容在存储之前都会使用其.toString方法转换为字符串。"

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

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

anullundefined时,操作员!将返回true

您可以尝试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 时,条件将返回true