正常的运算已经让人承受不住,为何还有隐式转换?由于js属于弱类型语言,乍一看,一应俱全,实际上是规则不强硬引发的放荡!ruby
步入正题,其实js中隐式类型转换是有规律可循的,先来看一下各种型之间的运算状况:bash
对象和布尔值进行比较时,对象先转换为字符串,而后再转换为数字,布尔值直接转换为数字code
[] == true; //false []转换为字符串'',而后转换为数字0,true转换为数字1,因此为false
对象和字符串进行比较时,对象转换为字符串,而后二者进行比较对象
[1,2,3] == '1,2,3' // true [1,2,3]转化为'1,2,3',而后和'1,2,3', 因此结果为true;
对象和数字进行比较时,对象先转换为字符串,而后转换为数字,再和数字进行比较字符串
[1] == 1; // true `对象先转换为字符串再转换为数字,两者再比较 [1] => '1' => 1 因此结果为true
字符串和数字进行比较时,字符串转换成数字,两者再比较class
'1' == 1 // true
字符串和布尔值进行比较时,两者所有转换成数值再比较技巧
'1' == true; // true
布尔值和数字进行比较时,布尔转换为数字,两者比较im
true == 1 // true
对象和字符串进行比较时,对象转换为字符串,而后二者进行比较img
[1,2,3] == '1,2,3' // true [1,2,3]转化为'1,2,3',而后和'1,2,3', 因此结果为true;
其实规律很简单,你们能够记下边这个图(是时候展示我高超的绘画技巧了)语言
如图,任意两种类型比较时,若是不是同一个类型比较的话,则按如图方式进行相应类型转换,如对象和布尔比较的话,对象 => 字符串 => 数值 布尔值 => 数值。
undefined
与null
是特殊状况,undefined==null
为true
。