Object.assign深拷贝?
时间: 2023-11-12 07:00:29 浏览: 97
Object.assign() 方法是用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它只会拷贝源对象自身的并且可枚举的属性到目标对象上,不会拷贝继承的属性和不可枚举的属性。如果目标对象中的属性具有相同的键,则属性将被源对象中的属性覆盖。需要注意的是,Object.assign() 方法执行的是浅拷贝,即如果源对象的属性值是一个对象或其他引用类型,那么目标对象中对应的属性值也会是这个对象或引用类型的引用,而不是这个对象或引用类型的拷贝。
相关问题
object.assign是深拷贝还是浅拷贝
`Object.assign` 是浅拷贝,它将源对象的所有可枚举属性复制到目标对象中,如果属性的值是一个对象引用,则只会复制该对象的引用,而不是对象本身。这意味着,如果源对象的属性值是一个对象,那么目标对象和源对象将共享该对象,而不是拥有它的副本。如果需要深拷贝对象,可以使用其他方法,例如递归地遍历对象并复制其属性。
Object.assign()深拷贝的例子
Object.assign()方法可以用于浅拷贝对象。如果要进行深拷贝,需要先使用JSON.stringify()将对象转化为JSON字符串,再使用JSON.parse()将JSON字符串转化为新的对象。以下是一个深拷贝的例子:
```javascript
let obj = {
name: 'Alice',
age: 20,
address: {
city: 'Beijing',
country: 'China'
}
};
let newObj = JSON.parse(JSON.stringify(obj));
newObj.name = 'Bob';
newObj.address.city = 'Shanghai';
console.log(obj); // { name: 'Alice', age: 20, address: { city: 'Beijing', country: 'China' } }
console.log(newObj); // { name: 'Bob', age: 20, address: { city: 'Shanghai', country: 'China' } }
```
注意,这种方法虽然可以进行深拷贝,但是如果对象中含有函数、正则表达式等特殊类型的属性,会失去它们的特殊性,变成普通的对象属性。同时,如果对象中有循环引用的情况,会出现无限递归的问题。在实际应用中,需要根据具体情况选择更合适的深拷贝方法。
阅读全文