谁能帮忙详解下O对象和{a:1}对象的隐式转化过程?(JS数据类型的隐式转换)

var O = { 
    toString(){ return 'String' },
    valueOf() { return 33}
}
console.log(""+O) //"33"
console.log(""+{a:1})//"[object Object]"
阅读 908
2 个回答

对象转化为数值会调用valueOf,转化为字符串会调用toString
image.png
image.png
image.png

对象默认的valueOf继承于Object.prototype,并且它返回它本身
image.png

对象使用valueOf获取到的值是它本身的话,会继续使用toString获取
image.png

+运算符会将对象转化为Number,也就是调用valueOf

基于上面四点,再来看代码

1、""+O,调用O的valueOf,返回33,33与空字符串相加,将33转换为字符串
2、""+{a:1}调用对象的valueOf,返回本身,再调用对象的toString,返回"[object Object]"

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏