javascript隐式转换

js中的不同的数据类型之间的比较转换规则如下:

1. 对象和布尔值比较

对象和布尔值进行比较时,对象先转换为字符串,然后再转换为数字,布尔值直接转换为数字

1
[] == true;  //false  []转换为字符串'',然后转换为数字0,true转换为数字1,所以为false
2. 对象和字符串比较

对象和字符串进行比较时,对象转换为字符串,然后两者进行比较。

1
[1,2,3] == '1,2,3' // true  [1,2,3]转化为'1,2,3',然后和'1,2,3', so结果为true;
3. 对象和数字比较

对象和数字进行比较时,对象先转换为字符串,然后转换为数字,再和数字进行比较。

1
[1] == 1;  // true  `对象先转换为字符串再转换为数字,二者再比较 [1] => '1' => 1 所以结果为true
4. 字符串和数字比较

字符串和数字进行比较时,字符串转换成数字,二者再比较。

1
'1' == 1 // true
5. 字符串和布尔值比较

字符串和布尔值进行比较时,二者全部转换成数值再比较。

1
'1' == true; // true
6. 布尔值和数字比较

布尔值和数字进行比较时,布尔转换为数字,二者比较。

1
true == 1 // true
JavaScript 原始类型转换表
原始值 转化为数值类型 转化为字符串类型 转化为 Boolean 类型
false 0 “false” false
true 1 “true” true
0 0 “0” false
1 1 “1” true
NaN NaN “NaN” false
“” 0 “” false
“midaoi” NaN “string” true
[] 0 “” true
[20] 20 “20” true
[10,20] NaN “10,20” true
[“midaoi”] NaN “midaoi” true
function(){} NaN “function(){}” true
{} NaN “[object Object]” true
null 0 “null” false
undefined NaN “undefined” false

任意两种类型比较时,如果不是同一个类型比较的话,则进行相应类型转换,如对象和布尔比较的话,对象 => 字符串 => 数值 | 布尔值 => 数值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
undefined == null 
[] == ![]
null >0
null == 0
null >= 0
[] == 0
[2]== 2
['0'] == false
'0' == false
[] == false
[null] == 0
null == 0
[null] == false
null == false
[undefined] == false
undefined == false