以下哪种方式为深拷贝?() Object.assign(targetObj,sourceObj) targetArr= sourceArr.slice(start,end) targetArr=sourceArr.concat(sourceArr1) tartgetObj = JSON.parse(JSON.stringify(sourceObj))
时间: 2023-06-19 08:08:41 浏览: 48
正确答案是:`targetObj = JSON.parse(JSON.stringify(sourceObj))`。因为 `JSON.parse(JSON.stringify())` 会将对象转化为字符串再转化为新的对象,这样就可以得到一个完全独立的新对象,达到深拷贝的效果。而其他三种方式都只是浅拷贝。
相关问题
Object.assign深拷贝?
Object.assign() 方法是用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它只会拷贝源对象自身的并且可枚举的属性到目标对象上,不会拷贝继承的属性和不可枚举的属性。如果目标对象中的属性具有相同的键,则属性将被源对象中的属性覆盖。需要注意的是,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()是浅拷贝,对于引用类型的属性值只是复制了引用,而不是真正的拷贝对象本身。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)