什么事浅克隆,深克隆?有什么区别?如何实现深度克隆
时间: 2024-09-26 13:12:38 浏览: 44
实例分析java对象中浅克隆和深克隆
浅克隆和深克隆都是对象复制的概念,主要用于在JavaScript中对数据结构进行副本操作。
**浅克隆(Shallow Clone)**:它复制的是对象的引用,而不是对象本身的内容。如果对象包含简单的数据类型(如字符串、数字等),浅克隆后的对象会共享相同的底层值。也就是说,修改浅克隆的对象会影响到原始对象。在JavaScript中,基本类型的属性会直接被复制,而复杂类型的属性(如数组或对象)则只是复制了引用。
```javascript
let original = {a: 1, b: ['foo', 'bar']};
let shallowCopy = Object.assign({}, original);
shallowCopy.b[0] = 'new'; // 修改后,original.b也变为了['new', 'bar']
```
**深克隆(Deep Clone)**:则是完全复制对象及其所有嵌套对象,包括循环引用的对象,这样修改深克隆的对象不会影响原始对象。对于复杂的数据结构,比如嵌套对象、数组,以及函数、日期、正则等,深克隆都会生成全新的实例。
在JavaScript中,实现深克隆较为复杂,常用的方法有递归、JSON.parse+JSON.stringify 或者第三方库如lodash的_.cloneDeep()。下面是一个简单的深拷贝函数示例,利用JSON.parse和JSON.stringify实现:
```javascript
function deepClone(obj) {
return JSON.parse(JSON.stringify(obj));
}
let original = {a: 1, b: [{c: 'hello'}]};
let deepCopy = deepClone(original);
deepCopy.b[0].c = 'world'; // 修改不影响original
```
阅读全文