鍍金池/ 問答/HTML/ toString 和valueOf的問題

toString 和valueOf的問題

很久以前我在犀牛書中看到了關(guān)于對象的toString和valueOf的解釋,如果,對象是日期對象則先調(diào)用toString,如果沒有返回原始數(shù)據(jù)(null,undefined之類的),就會繼續(xù)調(diào)用valueOf,如果還沒有則報錯。對于非日期對象(如數(shù)組)之類的,則是先valueOf,在toString,我自己也寫了一些代碼做過測試,確實沒有問題。

今天,我自己寫代碼的時候,就發(fā)現(xiàn)了一個有出入的地方。
        function A() {}
        A.prototype.toString = function() {
            return 123;
        }
        A.prototype.valueOf = function() {
            return 321;
        }
        var tempObj = new A();
        console.log(A)

按道理來說,我這里的A肯定不會是Date類型的,應(yīng)該是先調(diào)用valueOf返回321,但是結(jié)果卻是123(即先調(diào)用了toString)。
是我記錯了,還是說,valueOf和toString的調(diào)用是根據(jù)場景來的,而不是簡單的先后順序?

回答
編輯回答
尛曖昧

valueOf和tostring
console.logalert都是隱式調(diào)用toString方法
1+""調(diào)用的是valueOf方法

2018年7月28日 18:00
編輯回答
妖妖

valueOf在數(shù)值計算時,優(yōu)先調(diào)用
而toString在字符串的處理時優(yōu)先。

2017年1月28日 20:34
編輯回答
糖豆豆

你這代碼寫的和你問的有啥關(guān)系么.

2018年2月4日 08:35
編輯回答
巫婆

根據(jù)場景,console.log 輸出字符串,默認(rèn)調(diào)用toString

2017年9月27日 09:42
編輯回答
臭榴蓮

首先多謝各位的解答,我看了@李十三 老哥推薦的鏈接以后,算是明白了,我在書里面看到的只是在一部分,在各個值做數(shù)值運算(+,-,*等操作)使用valueOf,對于字符串處理的時候toString優(yōu)先,但是,我還有一些疑問,我再去寫一點測試代碼吧。

2017年4月9日 19:41