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]"
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
对象转化为数值会调用valueOf,转化为字符串会调用toString



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

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

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