js 深拷贝
时间: 2023-07-08 20:20:02 浏览: 45
在 JavaScript 中,对象和数组都是引用类型,当我们对一个对象或数组进行赋值操作时,其实赋值的是地址,而非实际的值。所以如果我们直接将一个对象或数组赋值给另一个变量,那么改变其中一个变量的值,另一个变量也会跟着改变。这就是浅拷贝的问题。
为了解决浅拷贝的问题,我们需要使用深拷贝。深拷贝是指将一个对象或数组中的所有属性和元素都复制到一个新的对象或数组中,并且新的对象和数组与原对象和数组没有任何关系,彼此独立。
以下是一个简单的深拷贝函数:
```javascript
function deepClone(obj) {
// 如果是 null 或者其他基本类型,则直接返回
if (obj === null || typeof obj !== "object") {
return obj;
}
// 判断是对象还是数组
const newObj = Array.isArray(obj) ? [] : {};
// 遍历原对象的属性或元素
for (let key in obj) {
// 递归调用深拷贝函数
newObj[key] = deepClone(obj[key]);
}
return newObj;
}
```
该函数接受一个对象或数组作为参数,返回一个深拷贝后的新对象或数组。该函数使用递归实现深拷贝,首先判断传入的参数是否为 null 或者其他基本类型,如果是,则直接返回。如果不是基本类型,则判断传入的参数是对象还是数组,并创建一个空的对象或数组。然后遍历原对象的属性或元素,递归调用函数进行深拷贝,并将拷贝后的属性或元素添加到新的对象或数组中。最后返回新的对象或数组即可。