toString 和valueOf的问题

很久以前我在犀牛书中看到了关于对象的toString和valueOf的解释,如果,对象是日期对象则先调用toString,如果没有返回原始数据(null,undefined之类的),就会继续调用valueOf,如果还没有则报错。对于非日期对象(如数组)之类的,则是先valueOf,在toString,我自己也写了一些代码做过测试,确实没有问题。

今天,我自己写代码的时候,就发现了一个有出入的地方。
        function A() {}
        A.prototype.toString = function() {
            return 123;
        }
        A.prototype.valueOf = function() {
            return 321;
        }
        var tempObj = new A();
        console.log(A)

按道理来说,我这里的A肯定不会是Date类型的,应该是先调用valueOf返回321,但是结果却是123(即先调用了toString)。
是我记错了,还是说,valueOf和toString的调用是根据场景来的,而不是简单的先后顺序?

阅读 3.5k
5 个回答

valueOf在数值计算时,优先调用
而toString在字符串的处理时优先。

valueOf和tostring
console.logalert都是隐式调用toString方法
1+""调用的是valueOf方法

你这代码写的和你问的有啥关系么.

根据场景,console.log 输出字符串,默认调用toString

首先多谢各位的解答,我看了@李十三 老哥推荐的链接以后,算是明白了,我在书里面看到的只是在一部分,在各个值做数值运算(+,-,*等操作)使用valueOf,对于字符串处理的时候toString优先,但是,我还有一些疑问,我再去写一点测试代码吧。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题