很久以前我在犀牛書中看到了關(guān)于對(duì)象的toString和valueOf的解釋,如果,對(duì)象是日期對(duì)象則先調(diào)用toString,如果沒有返回原始數(shù)據(jù)(null,undefined之類的),就會(huì)繼續(xù)調(diào)用valueOf,如果還沒有則報(bào)錯(cuò)。對(duì)于非日期對(duì)象(如數(shù)組)之類的,則是先valueOf,在toString,我自己也寫了一些代碼做過測(cè)試,確實(shí)沒有問題。今天,我自己寫代碼的時(shí)候,就發(fā)現(xiàn)了一個(gè)有出入的地方。 function A() {} A.prototype.toString = function() { return 123; } A.prototype.valueOf = function() { return 321; } var tempObj = new A(); console.log(A)按道理來說,我這里的A肯定不會(huì)是Date類型的,應(yīng)該是先調(diào)用valueOf返回321,但是結(jié)果卻是123(即先調(diào)用了toString)。是我記錯(cuò)了,還是說,valueOf和toString的調(diào)用是根據(jù)場(chǎng)景來的,而不是簡(jiǎn)單的先后順序?
toString 和valueOf的問題
尚方寶劍之說
2019-02-12 17:19:45