根據書中的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
轉換爲字符串?
'obj.toString()'返回預期結果 – guest271314
是的,@ guest271314,但'obj +'''會隱式地將'obj'轉換爲字符串。 – zhenguoli