js中的不一样的数据类型之间的比较转换规则以下:code
[] == true; //false []转换为字符串'',而后转换为数字0,true转换为数字1,因此为false
[1,2,3] == '1,2,3' // true [1,2,3]转化为'1,2,3',而后和'1,2,3', so结果为true;
[1] == 1; // true `对象先转换为字符串再转换为数字,两者再比较 [1] => '1' => 1 因此结果为true
'1' == 1 // true
'1' == true; // true
true == 1 // true
许多刚接触js的童鞋看到这么多的转换规则就懵圈了,其实规律很简单,你们能够记下边这个图(是时候展示我高超的绘画技巧了)
对象
如图,任意两种类型比较时,若是不是同一个类型比较的话,则按如图方式进行相应类型转换,如对象和布尔比较的话,对象 => 字符串 => 数值 布尔值 => 数值。
另外,咱们来看下一些须要"特别照顾"的。blog
来看一个有趣的题字符串
[] == false; ![] == false;
这两个的结果都是true,第一个是,对象 => 字符串 => 数值0 false转换为数字0,这个是true应该没问题,
第二个前边多了个!,则直接转换为布尔值再取反,转换为布尔值时,空字符串(''),NaN,0,null,undefined这几个外返回的都是true, 因此! []这个[] => true 取反为false,因此[] == false为true。技巧
undefined == null //true undefined和null 比较返回true,两者和其余值比较返回false Number(null) //0
有写错的地方,欢迎指正,不胜感激!数据类型