Object.assign()和浅拷贝的区别
时间: 2023-10-28 19:56:17 浏览: 35
Object() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象,并返回目标对象。它可以用于对象的浅复制,但是它不会对原对象进行深层次的复制。
浅拷贝是指将一个对象复制到另一个对象,新对象与原对象共享引用类型的属性。也就是说,新对象的引用类型属性指向的仍是原对象的引用类型属性。当修改新对象的引用类型属性时,原对象的相应属性也会被修改。
因此,Object.assign() 方法和浅拷贝的区别在于,Object.assign() 方法能够将多个源对象的可枚举属性复制到目标对象中,而浅拷贝只是将一个对象复制到另一个对象,并且新对象与原对象共享引用类型的属性。
相关问题
Object.assign浅拷贝
Object.assign()是一个用于将一个或多个源对象的可枚举属性复制到目标对象的方法。它返回目标对象。下面是一个使用Object.assign()进行浅拷贝的例子:
```javascript
const source = { name: 'John', age: 30 };
const target = { gender: 'male' };
const result = Object.assign(target, source);
console.log(result); // { gender: 'male', name: 'John', age: 30 }
```
在上面的例子中,我们将源对象source的属性复制到目标对象target中,并将结果存储在result变量中。由于Object.assign()方法返回目标对象,因此result变量中存储的是目标对象target。
需要注意的是,Object.assign()方法只会复制源对象的可枚举属性,而且只会进行浅拷贝。这意味着如果源对象的属性值是一个对象,那么目标对象中的该属性值将与源对象中的该属性值指向同一个对象。如果源对象的属性值是一个引用类型,那么目标对象中的该属性值将会被修改。
Object.assign()浅拷贝还是深拷贝
Object.assign()是浅拷贝[^1][^2]。
浅拷贝是指在拷贝对象时,只复制对象的引用而不是对象本身。当使用Object.assign()进行拷贝时,如果源对象的属性值是基础类型,那么拷贝的属性值是深拷贝的;但如果源对象的属性值是引用类型,那么拷贝的属性值只是复制了引用,而不是真正的拷贝对象本身,所以是浅拷贝。
举个例子,假设有一个源对象obj,其中有一个属性是引用类型的数组arr:
```javascript
let obj = { arr: [1, 2, 3] };
```
使用Object.assign()进行拷贝:
```javascript
let obj2 = Object.assign({}, obj);
```
此时,obj2中的arr属性与obj中的arr属性指向同一个数组对象,即它们共享同一个引用。如果修改obj2中的arr属性,那么obj中的arr属性也会受到影响,因为它们指向同一个数组对象。
```javascript
obj2.arr.push(4);
console.log(obj.arr); // 输出:[1, 2, 3, 4]
```
所以,Object.assign()是浅拷贝,对于引用类型的属性值只是复制了引用,而不是真正的拷贝对象本身。