亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

js類型轉換

js類型轉換

暮色呼如 2018-11-16 14:14:52
function a () {}a.toString = function(){    console.log(1)}a.valueOf = function(){    console.log(2)}a + '1' //2為什么只會輸出2,不應該是1和2都會輸出嗎?
查看完整描述

1 回答

?
FFIVE

TA貢獻1797條經驗 獲得超6個贊

我說的具體一點吧:valueOf和toString方法兩個方法一般只能調用一個,根據對象類型的不同,有不同的判斷順序。具體來說:
1.如果對象要轉換成字符串,會先檢測對象是否具有toString()方法,有這調用并返回原始值,再將這個值轉換成字符串。如果對象沒有toString()方法,或者這個方法不返回一個原始值。那么js會檢測該對象是否具有valueOf()方法,如果存在則調用,同樣調用并返回原始值,再將這個值轉換成字符串。如果對象valueOf和toString兩個方法都不存在,那么會拋出一個類型錯誤異常。
2.如果對象要轉換成數字,那么會檢測是否具有valueOf()方法,如果沒有再檢測toString()方法,具體原理與上面相同。
3.對于所有非日期對象來說,對象到原始值的轉換基本上是對象到數字的轉換,所有都是優先調用valueof().如果是日期對象,則使用對象到字符串的轉換模式。
具體到你這道題,a不是日期對象,優先調用valueof()方法,成功轉換后自然不會再調用toString()方法了。

查看完整回答
反對 回復 2018-12-13
  • 1 回答
  • 0 關注
  • 474 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號