轉(zhuǎn):http://www.reibang.com/p/d309d25789fd
問題描述
項目中缆瓣,欲在控制臺輸出變量res(自定義對象)查看數(shù)據(jù),代碼為:
console.log('res:' + res);
但控制臺顯示結(jié)果為res: [object Object],并非想要查看的數(shù)據(jù)。
問題原因
加號的作用
首先放钦,我們的代碼中有+(加號)運算符,它在這種情況下(字符串 + 其它什么東西)恭金,會調(diào)用toString()方法操禀,將其它類型的東西轉(zhuǎn)化為字符串,再和原始字符串拼接成一個字符串横腿;toString()從哪里來颓屑,干了什么斤寂?
以下摘自MDN:
除了null和undefined之外,其他的類型(數(shù)值揪惦、布爾遍搞、字符串、對象)都有toString()方法丹擎,它返回相應(yīng)值的字符串表現(xiàn)(并不修改原變量)尾抑。
每個對象都有一個toString()方法。
當(dāng)該對象被表示為一個文本值時蒂培,或者一個對象以預(yù)期的字符串方式引用時自動調(diào)用再愈。
默認(rèn)情況下,toString()方法被每個Object對象繼承护戳。如果此方法在自定義對象中未被覆蓋翎冲,toString()返回 "[object type]",其中type是對象的類型媳荒。
而在上述項目中抗悍,res正是我們自定義的對象,所以res.toString()的結(jié)果為[object Object]钳枕,所以console.log('res:' + res)的結(jié)果為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()是因為:{}會被當(dāng)成代碼塊而不是空對象