不同类型的变量比较要先转类型,叫做类型转换,类型转换也叫隐式转换。隐式转换通常发生在运算符加减乘除、等于、还有小于、大于等。js隐式转换,可以说是一个很大的坑了,下面就来侃一侃js隐式转换的规律。
1. ==隐式转换
如图,js在隐式转换(==)的时候,会按图示进行转换:
关于==隐式转换的规则,可以概括如下几点:
1. 字符串和数字比较时,字符串转数字;
2. 数字为布尔比较时,布尔转数字;
3. 字符串和布尔比较时,两者转数字;
4. 对象和布尔比较时,两者转数字;
5. 对象和数值比较时,对象转数字;
举个例子:
[1,2,3] == '1,2,3' //true [1,2,3]转化为'1,2,3',故结果为true;
'0' == true; //false '0'转换成数字0,true转换成数字1,故结果为false
特殊情况:
1. undefined==null;
2. 只有undefined、null、NaN、0、‘’会被转换为false,其余都为true;
3. NaN和任何值都不相等, 包括NaN本身;
4. null和undefined在进行比较的时候,不会进行类型转换。
即:0 == null //false;
0 == undefined //false;
false == null //false;
false == undefined //false;
true == null //false;
true == undefined //false;
'' == null //false;
'' == undefined //false;
2. 算数运算
转换规则:
1. 字符串加数字(或数字加字符串),数字就会转成字符串。
2. 数字减字符串(或字符串减数字,或字符串减字符串),字符串转成数字。如果字符串不是纯数字就会转成NaN。
3. 乘、除、大于、小于跟减的转换也是一样。
举个例子:
console.log(10 +'20') //1020
console.log(10 - '20') //-10 number
console.log(10 - 'one') //NaN
console.log(10 - '101a') //NaN
console.log(10 * '20') //200 number
console.log('10' * '20') //200 number
console.log(20 / '10') //2 number
console.log('20' / '10') //2 number
console.log('20' / 'one') //NaN
参考链接:https://www.cnblogs.com/chenmeng0818/p/5954215.html
https://blog.csdn.net/sinat_29454619/article/details/74075216