隐式转换
-
隐式转换的规则
- 转换为String类型:+ (字符串连接符)
- 转换为Number类型: ++/–(自增自减)+、-、*、/、%(算术运算符)>、 < 、>= 、<=、 == 、!=、 === 、!=== (关系运算符)
- 转换为boolean类型:!(逻辑非运算符)
-
隐式转换例子
- 字符串连接符与算术运算符隐式转换规则混淆
console.log(1+"true");//1true
分析:Number类型的数据与String类的数据用+连接此时+为字符串连接符号,将1用toString方法转换为String类型数据连接,所以为1true
console.log(1+true);//2
分析:Number类型数据与非字符类型的数据用+连接,将其他类型的数据调用Number方法转换后相加,true为1所以1+1 = 2
console.log(1+undefined);//NaN
分析:undefined转换为数字类型的数据为NaN类型的数据,任何与NaN运算的数据结果都为NaN
console.log(1+null);//1
分析:null转为数字类型的数据为0,0+1 = 1
- 关系运算符:会把其他数据类型转换成number之后再比较关系
console.log("2">10);//false
分析:当Number类型的数据与String类型的数据进行关系运算将String类型的数据转换为Number类型的数据运算, 2 < 10 所以为 false
console.log("2">"10");//true
分析:当两个String类型的数据进行关系运算时,同时转换为Number类型的数据进行比较,但是这个Number类型的数据为字符串对应的unicode编码,使用Str.charCodeAt()来获取。
"2" => 50 "10" => 49 50 > 49 所以为 true
console.log("abc">"b");//false
console.log("abc" > "aab"