深拷贝和浅拷贝有什么区别?请用js实现数据的深拷贝?
时间: 2023-10-18 21:16:55 浏览: 101
js对象浅拷贝和深拷贝详解
深拷贝和浅拷贝是指在复制对象时,是否复制对象内部的引用类型。
浅拷贝只复制对象的引用,也就是说,如果原对象中有一个引用类型的属性,那么复制后的对象中的该属性也会指向同一个引用对象。这意味着,当修改复制后对象的该属性时,原对象中的对应属性也会发生改变。
深拷贝是指复制对象及其内部所有引用类型的属性,也就是说,复制后的对象与原对象完全独立,修改复制后对象的属性不会影响原对象。
以下是JS实现数据的深拷贝的代码:
```javascript
function deepClone(obj) {
if (obj === null || typeof obj !== "object") {
return obj;
}
let result = Array.isArray(obj) ? [] : {};
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
result[key] = deepClone(obj[key]);
}
}
return result;
}
```
这个函数接受一个对象作为参数,返回一个它的深拷贝。如果参数不是对象或者是null,就直接返回它本身。如果参数是数组,就创建一个新的数组,否则创建一个新的对象。然后遍历参数对象的属性,如果是它自身的属性,就将这个属性的值递归地调用自身,然后把这个新的属性赋值给新的对象的对应属性。最后返回新的对象。
阅读全文