先说结论:运算操作(+|-|*|÷)时,对象的valueOf属性会先被调用,默认的valueOf属性会隐性地调用toString方法。
var a = {
toString: function() {
console.log("in a.toString");
return "|_a->toString_|";
},
valueOf: function() {
console.log("in a.valueOf");
return "|_a->valueOf_|";
}
};
alert(a);
//控制台-> in a.toString
//弹窗-> |_a->toString_|
结论1:alert方法只是单独直接调用toString方法;
var a = {
toString: function() {
console.log("in a.toString");
return "|_a->toString_|";
},
valueOf: function() {
console.log("in a.valueOf");
return "|_a->valueOf_|";
}
};
""+a;
//控制台-> in a.valueOf
""-a;
//控制台-> in a.valueOf
""*a;
//控制台-> in a.valueOf
""/a;
//控制台-> in a.valueOf
结论2:运算符会调用对象的valueOf方法;
var a = {
/// toString: function() {
// console.log("in a.toString");
// return "|_a->toString_|";
// },
valueOf: function() {
console.log("in a.valueOf");
return "|_a->valueOf_|";
}
};
""+a;
//控制台-> in b.valueOf
""-a;
//控制台-> in b.valueOf
""*a;
//控制台-> in b.valueOf
""/a;
//控制台-> in b.valueOf
结论3:操作符默认不会调用toString方法;
var a = {
toString: function() {
console.log("in a.toString");
return "|_a->toString_|";
},
/// valueOf: function() {
// console.log("in a.valueOf");
// return "|_a->valueOf_|";
// }
};
""+a;
//控制台-> in b.toString
""-a;
//控制台-> in b.toString
""*a;
//控制台-> in b.toString
""/a;
//控制台-> in b.toString
结论4:默认的valueOf会调用toString方法;
总结:
alert():只调用toString
运算符:只调用valueOf
valueOf(默认):会调用valueOf
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。