1 回答

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