toString 和valueOf區別

1.首先要說明的是這兩種方法是toPrimitive抽象操作裏會經常用到的。

默認情況下,執行這個抽象操作時會先執行valueOf方法,如果返回的不是原始值,會繼續執行toString方法,如果返回的還不是原始值,那麼會報錯,如果有指定轉換類型時,情況又會有所不同,詳細解析請繼續往下看。

(注意:valueOf和toString方法在Date,array等對象中有些是被重寫過的,所以不同對象調用此方法可能產生的操作不同,如果沒有這些方法,會調用最原始的Object.prototype上的valueOf和toString方法)

2. 這兩個方法 (轉換方法)

toString(): 是返回一個反映這個對象的字符串

valueOf(): 是返回它相應的原始值

對象 返回值
Array 數組沒有valueOf方法,繼承的是Object.prototype.valueOf的原始方法,返回數組本身
Boolean Boolean 值
Date 存儲的時間是從 1970 年 1 月 1 日午夜開始計的毫秒數 UTC
Function 函數沒有valueOf方法,繼承的是Object.prototype.valueOf的原始方法,返回函數本身
Number 數字值
Object 默認返回對象本身
String 字符串值

 

 

 

 

 

 

 

 

 

 

對象到字符串的轉換經過了如下步驟:

1.如果對象具有toString()方法,則調用這個方法。如果它返回一個原始值,js將這個值轉換成字符串,並返還這個字符串結果。

2.如果對象沒有toString()方法,或者這個方法並不返回一個原始值,那麼js將調用valueOf()方法。

3.否則,js無法從toString()或者valueOf()獲得一個原始值,因此這時它將拋出一個類型錯誤異常。

 

對象到數字的轉換過程中,js做了同樣類似的事情,但這裏它會首先嚐試使用valueOf()方法:

1.如果對象具有valueOf()方法,後者返回一個原始值,則js將這個原始值轉換成數字,並返回這個數字。

2.否則,如果對象具有toString()方法,後者返回一個原始值,則js將轉換並返回。

(首先js轉換成相應的字符串原始值,再繼續將這個原始值轉換成相應的數字類型,再返回數字)

3.否則,js拋出一個類型錯誤異常。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章