var O = {
toString(){ return 'String' },
valueOf() { return 33}
}
console.log(""+O) //"33"
console.log(""+{a:1})//"[object Object]"
var O = {
toString(){ return 'String' },
valueOf() { return 33}
}
console.log(""+O) //"33"
console.log(""+{a:1})//"[object Object]"
13 回答12.6k 阅读
2 回答4.9k 阅读✓ 已解决
7 回答1.8k 阅读
3 回答2.1k 阅读✓ 已解决
7 回答2k 阅读
5 回答581 阅读
3 回答1k 阅读✓ 已解决
对象转化为数值会调用valueOf,转化为字符串会调用toString



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

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

+
运算符会将对象转化为Number,也就是调用valueOf基于上面四点,再来看代码
1、
""+O
,调用O的valueOf,返回33,33与空字符串相加,将33转换为字符串2、
""+{a:1}
调用对象的valueOf,返回本身,再调用对象的toString,返回"[object Object]"