我正在调试一些东西并在JavaScript中发现了一些奇怪之处:
alert(1=='') ==> false alert(0=='') ==> true alert(-1=='') ==> false
隐含的字符串比较0应该为'0'是有意义的.对于所有非零值都是如此,但为什么不为零呢?
根据关于Javascript比较运算符的Mozilla文档
如果两个操作数的类型不同,则JavaScript转换操作数,然后应用严格比较.如果操作数是数字或布尔值,则操作数将转换为数字; 如果任一操作数是一个字符串,另一个操作数将转换为字符串
实际发生的是字符串被转换为数字.例如:
1 == '1'
变1 == Number('1')
变1 == 1
:true
那么试试这个:
1 == '1.'
变成1 == Number('1.')
变成1 == 1
:true
如果他们成为字符串,那么你会得到'1' == '1.'
,这将是错误的.
事实就是这样Number('') == 0
,因此0 == ''
是真的
当javascript执行隐式类型转换时,空字符串文字将匹配0整数.做这样的比较,你会得到你期望的结果:
alert(1==='') ==> false alert(0==='') ==> false alert(-1==='') ==> false