2013-04-05 42 views
22

在這兩種情況下我在輸出獲取對象的內容:使用toString()與JSON.stringify()相比有什麼區別?

alert(JSON.stringify(obj)); 

alert(obj.toString()); 

所以...有什麼區別?每個人的優點和缺點是什麼?

是否有實際的例子顯示不同?

+0

是'obj'在你的使用情況還是什麼的陣列? – 2013-04-05 12:38:12

+1

我在這裏沒有看到研究工作。 – thinklinux 2013-04-05 12:41:42

+1

@FabrícioMatté甚至數組toStrings例如'「1,2,3」',而JSON字符串相同的數組會給''[1,2,3]「'。 – Esailija 2013-04-05 12:41:50

回答

9

爲對象說

obj = { a: 'a', '1': 1 } 

obj.toString()給出

"[object Object]" 

JSON.stringify(obj)給出

"{"1":1,"a":"a"}" 

對於.toString(),缺省值被返回時的自變量類型是一個對象。 JSON.stringify在另一方面返回JSON文本,可以通過使用JSON.parse

4

正如你可能已經注意到,當你嘗試(希望)被轉換回JSON對象,調用.toString()任何對象繼承(*)Object.prototype.toString(),返回[object Object]

多數民衆贊成在內部定義,從一個對象返回內部名稱[Class]。當然,其他對象可以重寫此方法(請記住,它最初只在原型鏈上定義),並返回幾乎任何東西。

JSON.stringify()另一方面,是JSON對象的一種方法,哪種的對象結構串行化爲字符串版本。因此,Javascript對象表示法,它將描述一個對象,其中所有嵌套結構都是純的ascii字符串


(*)除外:與Object.create(null);

25

創建除非你有自定義的.toString方法返回該對象的JSON.stringify一個自定義對象的對象,沒有obj,會給obj.toString() == JSON.stringify(obj)

obj就像[1,2,3]數組然後.toString()給出:

"1,2,3" 

而且JSON.stringify

"[1,2,3]" 

這些都是接近但不完全一樣,JSON序列化的一個有逗號沒有歧義並直接以Javascript運行或可以解析爲JSON。

參見:

["1,",2,3].toString(); 
//"1,,2,3" ... so you can't just split by comma and get original array 
//it is in fact impossible to restore the original array from this result 

JSON.stringify(["1,",2,3]) 
//'["1,",2,3]' 
//original array can be restored exactly