2016-10-21 22 views
-2

我遇到了一個問題,其中JSON.stringify未保留我添加到使用$("#myForm").serializeArray();創建的對象的屬性。爲什麼要擴展一個對象以刪除它的一個成員?

我發現這個SO螺紋:JSON.stringify is ignoring object properties

而且解決方案爲我 - 我創建了延長我的mySerializedFormArray對象的新對象,然後我就能夠調用delete newObj.toJSON

如果我只是簡單地調用delete mySerializedFormArray.toJSON;,我添加的新屬性在字符串化過程中仍然被刪除。

爲什麼當我擴展對象時它會工作?

編輯:

var DynExport = $('#frmDynExport').serializeArray(); 

DynExport.IsFooEnabled = $("#hdnFooFlag").val(); 

var newObj = $.extend({}, DynExport); 

delete newObj.toJSON; 

var someOtherVar = JSON.stringify(newObj); 
DynExport = JSON.stringify(DynExport); 

someOtherVar將包括IsFooEnabledDynExport沒有。

+3

你應該發佈實際的代碼。 – Pointy

+0

@積分完成。我想,因爲我只是使用線程中的確切代碼,所以我並沒有真正需要它。 – sab669

+0

想要刪除的對象是否可以通過Object.freeze凍結?這在這裏是有意義的,並且將所有內容複製到新的(非凍結的)對象中都是可行的。 –

回答

2

.serializeArray()方法返回一個數組(這可能不奇怪)。當一個陣列被序列化爲JSON,它結束了看起來像這樣:

[ value, value, value, ... ] 

屬性名字是在陣列中的值的數字指標,而且他們:所述第一值對應於元件0,第二個元素爲1,依此類推。

在該表示方案中,沒有地方放置沒有數字名稱的屬性;即,不屬於「真實」數組的屬性。這些屬性當然可以在JavaScript中正常工作,但是沒有辦法用JSON來表示它們。

通過與$.exend()複製陣列屬性(連同你的「IsFooEnabled」屬性)到一個新的平原對象,你身邊的這個問題得到,因爲一個普通的對象JSON序列化方案明確包括所有屬性名稱。

相關問題