object.assign和扩展运算法是深拷贝还是浅拷贝,两者区别
时间: 2024-04-16 22:05:21 浏览: 112
Python的赋值、深拷贝与浅拷贝的区别详解
`Object.assign()` 和扩展运算符 `...` 都是浅拷贝。
浅拷贝是指只复制对象的一层属性,如果对象属性值是引用类型,则只是复制了引用地址,而不是复制整个引用对象。
举个例子,假设我们有一个对象 `obj1`:
```javascript
const obj1 = {
name: 'Bob',
age: 20,
skills: ['JavaScript', 'CSS', 'HTML']
};
```
如果我们使用 `Object.assign()` 或者扩展运算符 `...` 来将 `obj1` 赋值给另外一个变量 `obj2`,并修改 `obj2` 的 `skills` 属性:
```javascript
const obj2 = Object.assign({}, obj1);
obj2.skills.push('React');
console.log(obj1); // { name: 'Bob', age: 20, skills: ['JavaScript', 'CSS', 'HTML', 'React'] }
console.log(obj2); // { name: 'Bob', age: 20, skills: ['JavaScript', 'CSS', 'HTML', 'React'] }
```
可以看到,`obj1` 和 `obj2` 的 `skills` 属性都被修改了,这是因为 `Object.assign()` 和扩展运算符 `...` 只复制了 `obj1` 的一层属性,而 `skills` 属性是一个数组,只是复制了数组的引用地址,所以两个对象的 `skills` 属性指向同一个数组。
如果想要实现深拷贝,可以使用其他方法,如递归遍历对象并复制每一个属性,或者使用第三方库如 `lodash` 的 `cloneDeep()` 方法。
阅读全文