[英]Unexpected mutation of object array
我有以下代码(构建我自己的基于对象的小api...)
operator = {};
operator.set_data = function (json) {
this.data = json
};
operator.first_load_chart = function () {
let ref_data = operator.data;
ref_data['date'] = ref_data['date'].map(x => x ? new Date(x * 1000) : null);
};
operator.first_load_chart
在operator.data
首次分配后运行, operator.data['date']
是第一个 unix 时间戳。
然而,当我在operator.first_load_chart
operator.data['date]
现在更改为Date
对象之后在控制台中运行console.log(operator.data['date'])
时?
为什么会这样,我该如何防止这种突变?
let ref_data = operator.data
ref_data['date'] = ref_data['date'].map(x => x ? new Date(x * 1000) : null)
这里 ref_data 正在获取对运算符中实际数据的引用。 因此,当您使用 ref_data 修改值时,您将依次更新操作员本身的实际数据。 如果这不是故意的,您应该在修改之前制作数据对象的副本。
let ref_data = Object.assign({},operator.data);
ref_data['date'] = ref_data['date'].map(x => x ? new Date(x * 1000) : null)
请注意这不是深拷贝,即如果您有嵌套对象,则需要单独处理它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.