基本数据类型相加
字符串与其他类型
console.log('zsy' + true)
console.log(NaN + 'zsy')
console.log('zsy' + undefined)
数字与其他类型相加
console.log(1 + '1')
console.log(1 + true)
console.log(1 + false)
console.log(1 + undefined)
console.log(Infinity + Infinity)
console.log(-Infinity + (-Infinity))
console.log(-Infinity + Infinity)
NaN与其他类型
console.log(1 + NaN)
console.log(NaN + NaN)
console.log(undefined + NaN)
console.log(null + NaN)
混合数据类型相加
- 如果+运算符的两侧存在复杂数据类型,那么复杂数据类型会调用自身的valueOf()或toString()转为基本类型
- 转换规则是这样的:如果该对象(复杂数据类型)更倾向于转换为number类型,那么就优先调用valueOf,如果更倾向于转换为string类型,那么就优先调用toString
console.log({} + true)
重写对象的valueOf和toString方法
const foo = {
toString() {
return 'zsy'
},
valueOf() {
return 1
}
}
console.log(foo + 1)