2017-07-18 60 views
7

根據書中的Javascript權威指南第6版的3.8.3節的步驟困惑:的Javascript權威指南:變換對象爲字符串

將對象轉換爲字符串,JavaScript的採取以下步驟:
•如果對象有一個toString()方法,JavaScript會調用它。如果它返回一個原始值,JavaScript將該值轉換爲一個字符串(如果它不是一個字符串)並返回該轉換的結果。請注意,表3-2中的原始到字符串轉換均已明確定義。

•如果對象沒有toString()方法,或者如果該方法未返回原始值,則JavaScript會查找valueOf()方法。如果該方法存在,JavaScript會調用它。如果返回值是一個基元,則JavaScript將該值轉換爲一個字符串(如果它尚未)並返回轉換後的值。

•否則,JavaScript無法從toString()valueOf()獲取原始值,因此會引發TypeError。

例如:

var obj = { 
    toString: function() { 
     console.log('toStirng...'); 
     return 90; 
    }, 
    valueOf: function() { 
     console.log('valueOf...'); 
     return 80; 
    } 
} 

console.log(obj + ''); 

因此,上面的代碼段將obj轉換成因爲obj + ''串,所以它應該打印:

toString... 
90 

但實際上,它打印:

valueOf... 
80 

那又怎麼了? obj + ''是否將obj轉換爲字符串?

+0

'obj.toString()'返回預期結果 – guest271314

+0

是的,@ guest271314,但'obj +'''會隱式地將'obj'轉換爲字符串。 – zhenguoli

回答

6

this製品很好地示出:

這是因爲+ '' 利用ToPrimitive(數目)內部方法。如果您運行String(obj),您將收到toString方法結果。

相關問題