function cloneDeep (obj = {}) {
//1.值类型或null直接返回值
if (typeof obj !== 'object' || typeof obj == null) return obj;
//2.初始化数据,可能是{}可能是[]
let result
if (obj instanceof Array) result = [];
else result = {};
//3.遍历obj,确保key不是原型上的属性,递归调用为result添加键值对
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
result[key] = cloneDeep(obj[key])
}
}
//4.返回结果
return result
}
let obj = { a: 1, b: [1, 2, 3] }
let copy = cloneDeep(obj)
copy.b[0] = 9
console.log(obj) //{ a: 1, b: [ 1, 2, 3 ] }
console.log(copy) //{ a: 1, b: [ 9, 2, 3 ] }
JavaScript:手写深拷贝
最新推荐文章于 2024-07-20 23:54:17 发布