1 回答

TA貢獻1797條經(jīng)驗 獲得超6個贊
我說的具體一點吧:valueOf和toString方法兩個方法一般只能調(diào)用一個,根據(jù)對象類型的不同,有不同的判斷順序。具體來說:
1.如果對象要轉(zhuǎn)換成字符串,會先檢測對象是否具有toString()方法,有這調(diào)用并返回原始值,再將這個值轉(zhuǎn)換成字符串。如果對象沒有toString()方法,或者這個方法不返回一個原始值。那么js會檢測該對象是否具有valueOf()方法,如果存在則調(diào)用,同樣調(diào)用并返回原始值,再將這個值轉(zhuǎn)換成字符串。如果對象valueOf和toString兩個方法都不存在,那么會拋出一個類型錯誤異常。
2.如果對象要轉(zhuǎn)換成數(shù)字,那么會檢測是否具有valueOf()方法,如果沒有再檢測toString()方法,具體原理與上面相同。
3.對于所有非日期對象來說,對象到原始值的轉(zhuǎn)換基本上是對象到數(shù)字的轉(zhuǎn)換,所有都是優(yōu)先調(diào)用valueof().如果是日期對象,則使用對象到字符串的轉(zhuǎn)換模式。
具體到你這道題,a不是日期對象,優(yōu)先調(diào)用valueof()方法,成功轉(zhuǎn)換后自然不會再調(diào)用toString()方法了。
添加回答
舉報