js中不同的数据类型之间的比较转换规则
1.对象和布尔值比较
对象和布尔值进行比较时,对象先转换为字符串,然后在转换为数字,布尔值直接转换为数字
[] == true; // false [] 转换为'',然后转换为数字0,true转换为数字1,所以为false
2.对象和字符串比较
对象转换为字符串,然后两者在进行比较
[1, 2, 3] == '1,2,3' ; // true // [1, 2, 3] 转化为 '1,2,3' ,然后再和 '1,2,3' 比较,结果true
3.对象和数字比较
对象和数字进行比较时,对象先转换为字符串,然后转换为数字,再和数字比较
[1] == 1; // true // 对象先转换为字符串在转换为数字,二者在比较 [1] => '1' => 1
4.字符串和数字比较
字符串和数字进行比较时,字符串转换成数字在比较
'1' == 1; // true
5.字符串和布尔值比较
字符串和布尔值进行比较时,二者全部转换成数值再比较
'1' == true; // true '2' == true; // false
6.布尔值和数字比较
布尔值和数字进行比较时,布尔转换为数字,二者比较。
true == 1; // true
来个简单的图
如图,任意两种类型比较的时候,如果不是同一个类型比较的话,则按如图方式进行相应类型转换,
如对象和布尔比较的话:对象=>字符串=>数值 布尔值=>数值
看一个有趣的题
[] == false; ![] == false;
// 这两个结果都是true,第一个是:对象=>字符串=>数值0 false 转换为数字0
// 第二个前边多一个!,则直接转换为布尔值再取反,转换为布尔值时,空字符串 '', NaN, 0, null, undefined 这几个外返回的都是true,
// 所以 ![] 这个 []=> true 取反 false,所以 ![]== false 为true
undefined == null // true undefined和null比较返回true,二者和其他值比较返回false Number(null) // 0