举例说明深拷贝和浅拷贝的区别
时间: 2024-04-16 12:09:25 浏览: 102
假设有以下对象:
```
var obj = {
name: 'Alice',
age: 20,
hobbies: ['reading', 'traveling']
};
```
浅拷贝:
```
var newObj = Object.assign({}, obj);
```
此时,`newObj` 是 `obj` 的浅拷贝,它们的内存地址是不同的,但是它们的属性值(如 `name` 和 `age`)都相同。但是,如果修改 `newObj` 的某个属性值,`obj` 中对应的属性值也会被修改:
```
newObj.hobbies.push('swimming');
console.log(obj.hobbies); // ['reading', 'traveling', 'swimming']
```
这是因为 `newObj.hobbies` 指向的是同一个数组对象,所以修改 `newObj.hobbies` 会影响到 `obj.hobbies`。
深拷贝:
```
var newObj = JSON.parse(JSON.stringify(obj));
```
此时,`newObj` 是 `obj` 的深拷贝,它们的内存地址和属性值都完全独立。修改 `newObj` 的属性值不会影响 `obj`:
```
newObj.hobbies.push('swimming');
console.log(obj.hobbies); // ['reading', 'traveling']
```
这是因为 `newObj.hobbies` 和 `obj.hobbies` 是两个完全独立的数组对象。
阅读全文