JS中对象的类型转换
对象类型转换时,会调用内置的[@@toPrimitive]函数。
1⃣️如果期望或得一个string或default,则[@@toPrimitive]会先调用toString。如果toString属性不存在,则会嗲用valueOf。如果也不存在则会抛出一个TypeError
2⃣️如果期望获得number类型,则[@@toPrimitive]会首先尝试valueOf,若失败再尝试toString
//自定义valueOf和toString方法
let a = {
name:'小王',
age:18,
valueOf(){
return 18
},
toString(){
return `name is ${this.name}, age is ${this.age}`
}
}
也可以自己重写[Symbol.toPromitive]方法
//未重写版本
let a = {
name:'小王',
age:18,
}
console.log(a+'') //[object Object]
//重写toPrimitive版本
let a = {
name:'小王',
age:18,
[Symbol.toPrimitive](){
return `name is ${this.name}, age is ${this.age}`
}
}
console.log(a+'') //name is 小王, age is 18