深拷贝与浅拷贝

概念

什么是浅拷贝
原始和新的变量指向的内存地址是一样的,任意一个发生了变化,其他的也跟着变化。

什么是深拷贝
创建一个新的变量,变量的值与之前变量的值一样,但是地址不一样,修改后不会影响另一个值。(改旧的不影响新的,改新的不影响旧的。)

如何实现深拷贝

方法一 用第三方库

Lodash _.cloneDeep() Method
Ramda-clone

社区还有很多其他的,上面是比较经典常用的。

方法二 json 方法,stringify + parse 组合使用

先用 stringfy 把 object 压成 string,然后用 parse 解析

JSON.parse(JSON.stringify(obj1));  

局限性比较大,不建议用

具体原因:
日期转成字符串,用 parse 再转回去需要自己做处理
比较脆弱,容易报错,要做异常处理
特殊的数值会转成 null,比如 NaN Infinity
等等

总结来说就是:
容易报错
容易丢失值

方法三 自己写

参考深拷贝的定义自己实现就可以了。关键词深度优先遍历。

也可以看看 lodash 的源码