js的浅拷贝和深拷贝方法
时间: 2024-08-17 22:01:22 浏览: 59
在JavaScript中,浅拷贝和深拷贝是指复制对象时对属性值的处理方式:
1. **浅拷贝**:它创建了一个新的引用指向原来的对象或数组,新对象只包含一层的属性或元素。如果原对象的属性是基本数据类型或简单类型的引用,如字符串、数字、布尔值等,浅拷贝会直接复制;但如果属性是复杂类型(如对象或数组),浅拷贝只会复制其引用,不会递归地复制嵌套内容。浅拷贝可以用`Object.assign()`、`Array.from()` 或简单的赋值操作符`=`来实现。
示例:
```javascript
let obj = { a: [1, 2] };
let shallowCopy = Object.assign({}, obj); // 浅拷贝
console.log(shallowCopy === obj); // true (共享了相同的引用)
```
2. **深拷贝**:深度复制会递归地复制整个对象及其所有嵌套的对象和数组,包括循环引用。这意味着每个副本都是独立的,改变其中一个不会影响到另一个。JavaScript没有内置的深拷贝函数,但可以借助第三方库如`lodash.cloneDeep()`或`JSON.parse(JSON.stringify(obj))`来实现。
示例:
```javascript
const deepClone = require('lodash.clonedeep');
let obj = { a: [1, 2], b: { c: [3, 4] } };
let deepCopy = deepClone(obj); // 深拷贝
console.log(deepCopy === obj); // false (完全独立的副本)
```
阅读全文