转载自:隐式类型转换
一、隐式转换规则
- 转成string类型:+(字符串连接符)
- 转成number类型:++ –(自增自减)、+ - * / %(算术运算符)、> < >= <= == != === !==(关系运算符)
- 转成boolean类型:!(逻辑非)
二、字符串连接符与算术运算符规则混淆
说明
- +两边只要有一边是字符串,+就是字符串连接符
- +两边都是数字,+就是算术运算符
规则
1、字符串连接符+:会把其他数据类型调用String()方法转成字符串然后进行拼接。
2、算术运算符+:会把其他数据类型调用Number()方法转成数字然后做加法计算。
举例12345678//+是字符串连接符: String(1) + 'true' = '1true'console.log(1+ "true"); //1true//+是算术运算符:1 + Number(true) = 1 + 1 = 2console.log(1+true); //2//+是算术运算符:1 + Number(undefined) = 1 + NaN = NaNconsole.log(1+undefined); //NaN//+是算术运算符:1 + Number(null) = 1 + 0 = 1console.log(1+null); //1
三、关系运算符会把其他数据类型转成number之后再比较关系
规则
1、当关系运算符两边有一边是字符串时,会将其他数据类型使用Number()转换,然后比较关系。
2、当关系运算符两边都是字符串时,将两边字符串对应位置上的字符从左到右依次转成unicode编码进行比较。
举例
四、复杂数据类型在隐式转换时会先转成String,然后再转成Number运算
规则
1、先使用valueOf()方法获取其原始值,如果原始值不是number类型,则使用toString()方法转成string,再将string转成number运算
举例
看个问题,如何完善a,使其打印出’yes’?
五、逻辑非隐式转换与关系运算符隐式转换
说明
空数组的toString()方法会得到空字符串,而空对象的toString()方法会得到字符串[object Object]
规则
1、关系运算符:将其他数据类型转成数字
2、逻辑非:将其他数据类型使用Boolean()转乘布尔类型
3、以下8种情况转换为布尔类型会得到false
0、-0、NaN、undefined、null、’’(空字符串)、false、document.all()
除以上8种情况之外,所有数据都会得到true。
举例