j s中深拷贝和浅拷贝
时间: 2023-07-08 13:06:21 浏览: 108
js中的深拷贝和浅拷贝总结
5星 · 资源好评率100%
在 JavaScript 中,深拷贝和浅拷贝都是用来复制对象的方法,但它们有着不同的实现方式和应用场景。
浅拷贝是指复制对象的引用,而不是对象本身。这意味着新对象和原始对象引用相同的内存地址,因此更改其中一个对象的属性会影响到另一个对象。在 JavaScript 中,可以使用 Object.assign 或扩展运算符(...)进行浅拷贝。
例如:
```javascript
const obj1 = {a: 1, b: {c: 2}};
const obj2 = Object.assign({}, obj1);
obj2.a = 3;
console.log(obj1); // {a: 1, b: {c: 2}}
console.log(obj2); // {a: 3, b: {c: 2}}
obj2.b.c = 4;
console.log(obj1); // {a: 1, b: {c: 4}}
console.log(obj2); // {a: 3, b: {c: 4}}
```
在上面的例子中,我们使用 Object.assign 进行浅拷贝。当更改 obj2.a 的值时,obj1.a 的值不会受到影响。但是,当更改 obj2.b.c 的值时,obj1.b.c 的值也会发生更改。
深拷贝是指复制对象本身,而不是对象的引用。这意味着新对象和原始对象完全独立,更改其中一个对象的属性不会影响到另一个对象。在 JavaScript 中,可以使用 JSON.parse(JSON.stringify()) 或第三方库(如 Lodash 的 cloneDeep)进行深拷贝。
例如:
```javascript
const obj1 = {a: 1, b: {c: 2}};
const obj2 = JSON.parse(JSON.stringify(obj1));
obj2.a = 3;
console.log(obj1); // {a: 1, b: {c: 2}}
console.log(obj2); // {a: 3, b: {c: 2}}
obj2.b.c = 4;
console.log(obj1); // {a: 1, b: {c: 2}}
console.log(obj2); // {a: 3, b: {c: 4}}
```
在上面的例子中,我们使用 JSON.parse(JSON.stringify()) 进行深拷贝。当更改 obj2.a 的值时,obj1.a 的值不会受到影响。而当更改 obj2.b.c 的值时,obj1.b.c 的值仍然保持不变。
阅读全文