答案:git
解析:github
1; var obj = { valueOf: function() { return 1; } }; console.log(obj + ""); //'1' 2; var obj = { valueOf: function() { return [1, 2]; } }; console.log(obj + ""); //'[object Object]'; 3; var obj = { valueOf: function() { return [1, 2]; }, toString: function() { return 1; } }; console.log(obj + ""); //'1'; 4; var obj = { valueOf: function() { return [1, 2]; }, toString: function() { return [1, 2, 3]; } }; console.log(obj + ""); // 報錯 Uncaught TypeError: Cannot convert object to primitive value
拓展:web
var arr = [new Object(), new Date(), new RegExp(), new String(), new Number(), new Boolean(), new Function(), new Array(), Math] console.log(arr.length) // 9 for (var i = 0; i < arr.length; i++) { arr[i].valueOf = function() { return [1, 2, 3] } arr[i].toString = function() { return 'toString' } console.log(arr[i] + '') }
一、若 return [1,2,3]處爲 return "valueof",獲得的返回值是 valueof toString 7valueof
說明:其餘八種複雜數據類型是先調用 valueOf 方法,時間對象是先調用 toString 方法code
二、改爲 return [1,2,3],獲得的返回值是 9toString
說明:執行 valueof 後都來執行 toString對象
參與互動get