对象转原始值

step1 寻找对象中有无[Symbol.toPrimitive]方法,若没有,进行下一步

如果有,调用该方法
1.若该方法的返回值是原始值,则使用该原始值作为转换结果

const a = {
  [Symbol.toPrimitive]() {
    return 1
  }
}

console.log(+a) // 打印1

2.若该方法无返回值,则该对象转原始值的结果为NANundefined

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.若返回值不是原始值,抛出异常

posted @ 2025-08-11 15:34  wenerda  阅读(3)  评论(0)    收藏  举报