/**
* 对象深拷贝(只适用于对象)
* @param {*} sourceObj 源对象
* @param {*} targetObj 目标对象
*/
function deepClone(sourceObj, targetObj = {}) {
//返回对象属性组成的数组
let keys = Object.keys(sourceObj);
//循环复制对象的属性和值
keys.forEach(function (element) {
//获取到属性对应的值
let a = sourceObj[element];
if (!a) {
//属性值为undefined、null和布尔类型false
//这几种类型要先进行判断,这几种类型没有constructor属性
targetObj[element] = a;
} else if (a.constructor === Object) {
//属性的值为object,递归复制
targetObj[element] = {};
deepClone(a, targetObj[element])
} else if (a.constructor === Array) {
//属性值为数组
targetObj[element] = [...a];
} else {
//属性值为基本数据类型和布尔类型true
targetObj[element] = a;
}
});
return targetObj
}
JavaScript中实现深拷贝(针对于对象)
最新推荐文章于 2021-04-15 13:38:35 发布