之前我们总结了JS中抽象比较(==)的数据类型转换规则,这一篇我们来讲讲JS加法中的数据转换规则。话不多说,上图
当两个不同类型的数据相加时,低层级的数据类型向高层级的数据类型转换,直到+号两边数据类型相同
比如最高层级的String与其他任意类型相加时,其他类型都会转换成String,再与之相加。
举个例子:
String与其他类型相加,其他类型转换成String
console.log(1 + '2' + 1) //121
console.log(1 + +'2' + 1) //4
console.log('2' + true) //2true
console.log('2' + [1, 2, 3]) //21,2,3
console.log('2' + {age: 18}) //2[object Object]
Number与Object相加,Number→String,Object→String
console.log(1 + [1]) //11
console.log(1 + [1, 2, 3]) //11,2,3
console.log(2 + {age: 18}) //2[object Object]
Number与Boolean相加,Boolean→Number
console.log(2 + true) //3
console.log(2 + false) //2
Boolean与Object相加,Boolean→String,Object→String
console.log([1, 2, 3] + true) //1,2,3true
Boolean与Boolean相加,Boolean→Number
console.log(true + true) //2
Object与Oject相加,Object→String
console.log([1, 2, 3] + [1, 2, 3]) //1,2,31,2,3