对象或数组的简单赋值,修改新值也会改变原值。这时我们需要获取原值的深拷贝对象。
方法一知道要赋值的是对象还是数组
对于对象,可以通过newObj = JSON.parse(JSON.stringify(obj))实现。
对于数组,可以通过 newArr = […arr]或者newArr = arr.slice(0)来实现。
方法二不知道要赋值的数据类型
还有个通用的方法调用一次
let isClass=function(o) {undefined
if (o === null) return “Null”;
if (o === undefined) return “Undefined”;
return Object.prototype.toString.call(o).slice(8, -1);
},
let deepClone=function(obj) {undefined
if (!obj) { return null }
let result, oClass = isClass(obj);
//确定result的类型
if (oClass === “Object”) {undefined
result = {};
} else if (oClass === “Array”) {undefined
result = [];
} else {undefined
return obj;
}
for (let key in obj) {undefined
if (obj.hasOwnProperty(key)) {undefined
let copy = obj[key];
if (isClass(copy) == “Object”) {undefined
result[key] = deepClone(copy);//递归调用
} else if (isClass(copy) == “Array”) {undefined
result[key] = deepClone(copy);
} else {undefined
result[key] = obj[key];
}
}
}
return result;
}
newcontent=deepClone(content)