当前位置:  开发笔记 > 编程语言 > 正文

隐含字符串比较,0 ='',但1 ='1'

如何解决《隐含字符串比较,0='',但1='1'》经验,为你挑选了2个好方法。

我正在调试一些东西并在JavaScript中发现了一些奇怪之处:

alert(1=='') ==> false
alert(0=='') ==> true
alert(-1=='') ==> false

隐含的字符串比较0应该为'0'是有意义的.对于所有非零值都是如此,但为什么不为零呢?



1> Greg..:

根据关于Javascript比较运算符的Mozilla文档

如果两个操作数的类型不同,则JavaScript转换操作数,然后应用严格比较.如果操作数是数字或布尔值,则操作数将转换为数字; 如果任一操作数是一个字符串,另一个操作数将转换为字符串

实际发生的是字符串被转换为数字.例如:

1 == '1'1 == Number('1')1 == 1:true

那么试试这个: 1 == '1.'变成1 == Number('1.')变成1 == 1:true 如果他们成为字符串,那么你会得到'1' == '1.',这将是错误的.

事实就是这样Number('') == 0,因此0 == ''是真的



2> Joel Coehoor..:

当javascript执行隐式类型转换时,空字符串文字将匹配0整数.做这样的比较,你会得到你期望的结果:

alert(1==='') ==> false
alert(0==='') ==> false
alert(-1==='') ==> false

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有