最近在看书的时候又遇到了深浅拷贝的问题,出现这么频繁,就在这里梳理记录一下吧。

1. 定义

在看之前,首先来明确深拷贝与浅拷贝的定义

浅拷贝:复制出的新对象会直接复制旧对象中的基本类型属性以及对其他对象的引用,注意这里是引用。
深拷贝:对于深拷贝来说,除了复制旧对象中的基本类型属性以外还要复制对象属性,这里是新对象而不是引用。

2. 浅拷贝

浅拷贝的思路很简单,只需要遍历属性进行复制就可以了,在ES6中定义了Object.assign({}, oldObject)来遍历一个或者多个源对象的所有可枚举属性进行复制,并且会返回目标对象。

3. 深拷贝

对于深拷贝来说,目前还没有内置的方法可以操作,一个简单的思路是可以递归复制所引用的对象,但是会出现引用链形成闭环而导致死循环,所以需要检测闭环来防止这种安全问题,这里不做细致讨论,对于JSON安全的对象,可以使用以下方法进行简单的复制,如下:

let newObject = JSON.parse(JSON.stringify(oldObject));

当然,需要注意的是这种复制方法不会复制对象的原型链以及其他一些类似属性描述符等隐藏属性。

文章目录
1人点赞