今天我在使用JSON的時候遇到了一個問題,那就是can't stringify json!
var obj = { name: 'Alice', age: 20 }; JSON.stringify(obj);
本來這段代碼應該是輸出一個對象的JSON字符串,但是卻報錯了。在經過查找資料后,我發現了兩個原因造成這個問題。
第一個,有些類型無法被JSON.stringify()處理。例如,如果對象中有一個屬性的值是函數、NaN或Infinity,那么它們會自動被轉換為null。
var obj = { name: 'Alice', age: 20, sayHello: function() { console.log('Hello!'); }, height: NaN, weight: Infinity }; JSON.stringify(obj); // {"name":"Alice","age":20,"height":null,"weight":null}
第二個原因是對象中存在循環引用。如果一個對象被自己的一個屬性引用,那么它是循環引用了。如下:
var obj = { name: 'Alice', age: 20 }; obj.self = obj; JSON.stringify(obj); //Uncaught TypeError: Converting circular structure to JSON
當對象存在循環引用時,JSON.stringify()無法處理。
因此,當我們遇到can't stringify json!這個問題時,我們需要檢查一下對象中的屬性是否包含函數、NaN、Infinity,以及是否存在循環引用。對于遇到的這些情況,我們可以手動進行特殊處理。
上一篇vue 橫向滾動菜單