对象转原始值
step1 寻找对象中有无[Symbol.toPrimitive]方法,若没有,进行下一步
如果有,调用该方法
1.若该方法的返回值是原始值,则使用该原始值作为转换结果
const a = {
[Symbol.toPrimitive]() {
return 1
}
}
console.log(+a) // 打印1
2.若该方法无返回值,则该对象转原始值的结果为NAN或undefined
const a = {
[Symbol.toPrimitive]() {
}
}
console.log(+a) //打印NAN
console.log(''+a) //打印undefined
3.若该方法的返回值不是原始值(比如对象),则报错
const a = {
[Symbol.toPrimitive]() {
return {}
}
}
console.log(+a) // 直接报错TypeError: Cannot convert object to primitive value
step2 寻找对象中有无valueOf方法,若没有,进行下一步
如果有,调用该方法
1.若该方法的返回值是原始值,则使用该原始值作为转换结果
const a = {
valueOf () {
return 2
}
}
console.log(+a) // 打印2
2.若返回值不是原始值,进入下一步(不会报错)
step3 寻找对象中有无toString方法,若没有,直接报错
如果有,调用该方法
1.若该方法的返回值是原始值,则使用该原始值作为转换结果
const a = {
toString() {
return 1
}
}
console.log(+a) //打印1
2.若返回值不是原始值,抛出异常

浙公网安备 33010602011771号