JS数据隐式转换
2018-12-10 本文已影响28人
leonardni
一、js中的不同的数据类型之间的比较转换规则如下:
如图,任意两种类型比较时,如果不是同一个类型比较的话,则按如图方式进行相应类型转换,如对象和布尔比较的话,
对象 => 字符串 => 数值 布尔值 => 数值
。
1. 1 对象和布尔值比较
对象和布尔值进行比较时,对象先转换为字符串,然后再转换为数字,布尔值直接转换为数字
[] == true; //false []转换为字符串'',然后转换为数字0,true转换为数字1,所以为false
1.2 对象和字符串比较
对象和字符串进行比较时,对象转换为字符串,然后两者进行比较。
[1,2,3] == '1,2,3' // true [1,2,3]转化为'1,2,3',然后和'1,2,3', so结果为true;
1.3 对象和数字比较
对象和数字进行比较时,对象先转换为字符串,然后转换为数字,再和数字进行比较。
[1] == 1; // true `对象先转换为字符串再转换为数字,二者再比较 [1] => '1' => 1 所以结果为true
1.4 字符串和数字比较
字符串和数字进行比较时,字符串转换成数字,二者再比较。
'1' == 1 // true
1.5 字符串和布尔值比较
字符串和布尔值进行比较时,二者全部转换成数值再比较。
'1' == true; // true
1.6 布尔值和数字比较
布尔值和数字进行比较时,布尔转换为数字,二者比较。
true == 1 // true
二、js中布尔值为false的六种情况
值 | 说明 |
---|---|
undefined | 未定义,找不到值时出现 |
null | 代表空值 |
false | 布尔值的false,字符串"false"布尔值为true |
0 | 数字0,字符串"0"布尔值为true |
NaN | 无法计算结果时出现,表示"非数值";但是typeof NaN==="number" |
"" (双引号)或 '' (单引号) |
空字符串,中间有空格时也是true |
下面两种情况:
[] == false;
适用于对象与布尔类型比较。对象 => 字符串 => 数值0 false转换为数字0,这个是true应该没问题。
![] == false;
第二个前边多了个!,则直接转换为布尔值再取反,转换为布尔值时,空字符串(''),NaN,0,null,undefined
这几个外返回的都是true
, 所以! []
这个[] => true
取反为false
,所以[] == false
为true
。