js中的深拷贝浅拷贝
时间: 2023-10-24 13:28:34 浏览: 127
在 JavaScript 中,深拷贝和浅拷贝是用来复制对象或数组的两种不同方式。
浅拷贝是指创建一个新的对象或数组,但是只复制了原始对象或数组的引用。这意味着当你修改新的对象或数组时,原始对象或数组也会受到影响。常见的浅拷贝方法包括 `Object.assign()` 和展开运算符 `...`。
例如,使用浅拷贝方法来复制一个对象:
```javascript
const obj1 = { name: 'John', age: 30 };
const obj2 = Object.assign({}, obj1);
obj2.age = 40;
console.log(obj1); // { name: 'John', age: 30 }
console.log(obj2); // { name: 'John', age: 40 }
```
深拷贝是指创建一个完全独立的对象或数组副本,与原始对象或数组没有任何关联。这意味着当你修改新的对象或数组时,原始对象或数组不会受到任何影响。常见的深拷贝方法包括 `JSON.parse(JSON.stringify())` 和递归复制。
例如,使用深拷贝方法来复制一个对象:
```javascript
const obj1 = { name: 'John', age: 30 };
const obj2 = JSON.parse(JSON.stringify(obj1));
obj2.age = 40;
console.log(obj1); // { name: 'John', age: 30 }
console.log(obj2); // { name: 'John', age: 40 }
```
需要注意的是,使用 `JSON.stringify()` 和 `JSON.parse()` 进行深拷贝时,有一些限制。它们无法复制一些特殊的对象属性,比如函数、正则表达式以及循环引用的对象等。在处理这些情况时,可能需要使用其他的深拷贝方法或自己实现递归复制。
阅读全文