【发布时间】:2013-06-16 12:29:31
【问题描述】:
我在使用 JavaScript 中的 + 运算符进行隐式强制转换时遇到了麻烦。即valueOf和toString的优先顺序。
var obj = {};
obj.toString(); => "[object 对象]"
obj.valueOf(); => 对象 {}
'Hello ' + obj; => "你好 [object Object]"
所以 obj 是使用 toString() 方法而不是 valueOf() 隐式强制转换为字符串的;
var obj2 = {
toString: function() {
return "[object MyObject]";
},
valueOf: function() {
return 17;
}
};
obj2.toString(); => "[object MyObject]"
obj2.valueOf(); => 17
'Hello ' + obj2; => "你好 17"
所以当我重写 toString 和 valueOf 方法时,+ 运算符将强制使用 valueOf。
我错过了什么?谢谢。
【问题讨论】:
-
有趣...顺便说一句,如果你从 obj2 中取出 valueOf,+ 运算符将再次强制转换为 toString
-
当使用带有 + 运算符的 Object 参数时,valueOf 总是优先于 toString。结果 obj.valueOf().toString() === "[object Object]";现在说得通了。
-
我想知道如何才能真正利用 Javascript 的这一特性。
标签: javascript