【发布时间】:2017-03-04 03:05:44
【问题描述】:
我遇到了一个问题,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 将包括 IsFooEnabled,DynExport 不包括。
【问题讨论】:
-
您应该发布所涉及的实际代码。
-
@Pointy 完成。我想,因为我只是在我链接的线程中使用了确切的代码,所以并不需要它。
-
可以通过 Object.freeze 冻结您要删除的对象吗?这在这里很有意义,将所有内容复制到一个新的(非冻结)对象中就可以了。
-
.toJSON是怎么回事? jQuery 的.serializeArray()的返回值不会有toJSON方法,因此您传递给$.extend()的对象也不会。
标签: javascript jquery json