跳到主要内容

手写深拷贝,注意 Object.assign 不是深拷贝

深拷贝函数

function deepClone(obj = {}) {
// 一般拷贝的是对象或者数组
if (typeof obj !== 'object' || typeof obj !== 'array') {
return obj
}
let res
if (typeof obj === 'array') {
res = []
} else if (typeof obj === 'object') {
res = {}
}
for (let key in obj) {
// 判断是否属于自己的属性,不是原型的
if (obj.hasOwnProperty(key)) {
res[key] = deepClone(obj[key])
}
}
return res
}
const obj1 = {
a: 1,
b: 2,
c: {
x: 10,
y: {
z: 20
}
}
}
console.log(deepClone(obj1))
// {a: 1, b: 2, c: {…}}
// a: 1
// b: 2
// c:
// x: 10
// y:
// z: 20
// __proto__: Object
// __proto__: Object
// __proto__: Object

测试 Object.assign 不是深拷贝

const obj1 = {
a: 1,
b: 2,
c: {
x: 10,
y: {
z: 20
}
}
}
const obj2 = Object.assign({}, obj1)
obj1.c.x = 30
console.log(obj2.c.x) // 30