实现一个深拷贝

深拷贝和浅拷贝是针对复杂数据类型来说的,浅拷贝只拷贝一层,而深拷贝是层层拷贝。

代码中理解...

   

   

   

    clone



上面代码运行结果:


实现一个深拷贝_第1张图片
1

可以看出浅拷贝当属性值是基本数据类型时,新的对象和原对象互不影响,但是如果第一层的属性值是复杂数据类型,那么新对象和原对象的属性值其指向的是同一块内存地址。

深拷贝实现的目的就是是指新对象和原对象的属性值其指向的不是同一块内存地址。

实现方案1:JSON.parse(JSON.stringify(obj))

修改上面的代码:

   

   

   

    clone



结果:


实现一个深拷贝_第2张图片
2

可以看出obj 和 obj3的值互不影响。不过这样实现有一些缺点:

对象的属性值是函数时,无法拷贝。

原型链上的属性无法拷贝

不能正确的处理 Date 类型的数据

不能处理 RegExp

会忽略 symbol

会忽略 undefined


那么自己怎么实现一个deepClone呢?

   

   

   

    clone



资料参考:

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/WeakMap

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

你可能感兴趣的:(实现一个深拷贝)