javascript中valueOf和toString区别及调用时机

wxhhbdx 2015-09-10 10:00:19

Date.prototype.toString=function(){
return 11;
}
Date.prototype.valueOf=function(){
return 22;
}
var b1 = new Date();
var b2 = new Date();
console.log("b1.toString():"+b1.toString());
console.log("b1.valueOf():"+b1.valueOf());
console.log("b1+b2:"+(b1+b2));

function circle(){
this.toString=function(){
return 11;
};

this.valueOf=function(){
return 33;
}
}

var cir1 = new circle();
var cir2 = new circle();
console.log("cir1+cir2="+(cir1+cir2));

输出结果为:
b1.toString():11
b1.valueOf():22
b1+b2:22
cir1+cir2=66
为什么两个date对象相加调用的是其toString()方法,而两个circle对象相加,调用的却是其valueOf方法。
...全文
573 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
KK3K2005 2015-09-11
  • 打赏
  • 举报
回复
晦涩 难读 结果决定于不受控的底层机制 花这个时间不值 结果已经很明确表达了 date 和 obj 的优先次序 对于结果导向 没有为什么
似梦飞花 2015-09-11
  • 打赏
  • 举报
回复
还真是 没注意过一只
似梦飞花 2015-09-11
  • 打赏
  • 举报
回复
数学运算时先调valueOf 没有的话掉toString
薛磊adams 2015-09-10
  • 打赏
  • 举报
回复
同问,说事toString在字符串优先,另一个数值优先
天际的海浪 2015-09-10
  • 打赏
  • 举报
回复
b1+b2中的加号可以当做数值的相加,也可以当做字符串拼接。到底是哪种操作这就有个优先级问题 普通对象valueOf优先于toString Date对象toString优先于valueOf 你只要让对象处于只能做为数值才好操作的情况,就自然调用valueOf了 console.log("b1+b2:"+(b1*1+b2*1));

87,964

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧