==比较时的坑

''=='0' //false 2个都是字符串 直接比较,不需要转换
0=='' //true ''转为数字
0=='0' //true '0'转为数字

false=='false' //false false转为0 ,'false'为true
false=='0' //true
与运算符及ECMAScript内定义的其两边的表达式的类型转换规则有关
false=='0' 这种情况是两边分别将布尔类型和字符串都转换成了数字进行比较,false->0,'0'->0,所以实际上最后是 0==0

false==undefined //false undefined和null都是没有值,所以它们和false比都不相等
false==null //false
null==undefined //true

'\t\r\n'==0 //true

注:转换优先级Object型低于字符型,字符型低于数字型

 

一些补充,对于转换规则,可以参考ECMA262,已经写得很清楚了,另外《javascript高级程序设计(第三版)》都也有对对象转为原始值的详细描述。

另外,这里有一个疑问[]==0 是如何隐式转换的,在讨论这个问题的时候,有不少人认为是Number([])==0 ,但我并不觉得是这样,

我觉得是先[]转为""  ,""==0比较时又将""转为了0。

不知道你们是怎么认为的。。。

posted on 2014-11-15 20:50  叫我钱了个浅  阅读(149)  评论(0编辑  收藏  举报

导航