==比较时的坑
''=='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。
不知道你们是怎么认为的。。。
hi,我的新博客地址:ysha.me !!