js 深度拷贝对象
时间: 2023-07-18 12:09:06 浏览: 101
在 JavaScript 中,如果直接将一个对象赋值给另一个变量,那么它们将共享同一个对象,也就是说它们指向同一个内存地址。这种情况下,修改其中一个变量的属性或者方法,将会影响到另一个变量。为了避免这种情况,可以使用深度拷贝来创建一个新的对象,从而避免共享内存地址的问题。
以下是一些实现深度拷贝的方法:
1. 使用 JSON.parse 和 JSON.stringify
这种方法可以将对象转换为 JSON 字符串,然后再将 JSON 字符串转换为新的对象,这样就可以创建一个与原对象完全独立的新对象。但是,这种方法有一些限制,例如无法拷贝函数、正则表达式等。
```javascript
const obj = {a: 1, b: {c: 2}};
const newObj = JSON.parse(JSON.stringify(obj));
console.log(newObj); // 输出 {a: 1, b: {c: 2}}
```
2. 递归拷贝
这种方法可以遍历对象的所有属性和方法,创建一个新的对象,并将原对象的属性和方法复制到新对象中。如果属性值是对象或者数组,那么递归调用拷贝函数来创建一个新的对象或者数组。
```javascript
function deepCopy(obj) {
if (typeof obj !== 'object' || obj === null) {
return obj;
}
const newObj = Array.isArray(obj) ? [] : {};
for (let key in obj) {
newObj[key] = deepCopy(obj[key]);
}
return newObj;
}
const obj = {a: 1, b: {c: 2}};
const newObj = deepCopy(obj);
console.log(newObj); // 输出 {a: 1, b: {c: 2}}
```
通过以上两种方法,可以实现深度拷贝对象。需要注意的是,如果对象中包含循环引用,那么以上两种方法都会出现栈溢出的问题,需要进行特殊处理。
阅读全文