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的调用是根据场景来的,而不是简单的先后顺序?


尚方宝剑之说
浏览 489回答 2
2回答

九州编程

valueOf在数值计算时,优先调用而toString在字符串的处理时优先。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript