天天看點

7.10 JS輸出内容為[object Object]

  1. JS輸出内容為[object Object]
console.log('res:' + res);//[object Object]
           

加号的作用

首先,我們的代碼中有+(加号)運算符,它在這種情況下(字元串 + 其它什麼東西),會調用toString()方法,将其它類型的東西轉化為字元串,再和原始字元串拼接成一個字元串;

toString()從哪裡來,幹了什麼?

以下摘自MDN:

除了null和undefined之外,其他的類型(數值、布爾、字元串、對象)都有toString()方法,它傳回相應值的字元串表現(并不修改原變量)。

每個對象都有一個toString()方法。 當該對象被表示為一個文本值時,或者一個對象以預期的字元串方式引用時自動調用。

預設情況下,toString()方法被每個Object對象繼承。如果此方法在自定義對象中未被覆寫,toString()傳回 “[object

type]”,其中type是對象的類型。 而在上述項目中,res正是我們自定義的對象,是以res.toString()的結果為[object

Object],是以console.log(‘res:’ + res)的結果為res: [object Object]。

解決方法

去掉字元串‘res’,直接輸出對象res

代碼改寫如下:

console.log(JSON.stringify(user))//返一般回一個對象
           

Tips:一些補充

(1).toString()      // "1"

[1,2].toString()    // "1, 2"

({}).toString()     // [object Object]

true.toString()     // "true"

null.toString()     // Uncaught TypeError: Cannot read property 'toString' of null

undefined.toString()  // Uncaught TypeError: Cannot read property 'toString' of null
           

第3行,不能直接寫成{}.toString()是因為:{}會被當成代碼塊而不是空對象,也就是導緻上面問題産生的原因

繼續閱讀