[英]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.