chrome和firefox上的javascript null比较不同
javascript null comparison different on chrome and firefox
我有以下代码:
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
}
当a
为null
或undefined
时,操作员!
将返回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
- 数组在递归方法中设置为null
- 比较从函数和生成的日期对象
- 如何使用 node.js 比较两个 json 数组
- jQuery自定义验证比较多个输入的序列
- 字符串在将其传递给另一个活动Android JavaScript时读取Null
- 反向字符串比较
- 无法获取属性'selectedIndex'的未定义引用或null引用
- Meteor方法在客户端返回null,在客户端运行的相同方法返回正确的值
- 通过JSON&比较时间
- 来自文本输入null的html javascript变量
- 将DOM节点值与字符串Javascript进行比较
- delete在Object上效率低下,但在DOM Element's的数据属性,与null out相比
- 从键值结构中获取数据,并将其与AngularJS中ng重复的值进行比较
- chrome和firefox上的javascript null比较不同
- 带有护照的节点:比较密码抛出错误未定义不是一个函数,当它返回返回完成(null,用户);
- 与 null 进行比较时,为什么在下划线中使用 ==.js而不是 ===
- null和未定义的不一致比较
- 在javascript中,将数值与null进行比较
- 比较未定义/null/NaN与ActionScript中的number
- JSON Diff将字符串与null分隔符进行比较