深拷贝与浅拷贝
概念
什么是浅拷贝
原始和新的变量指向的内存地址是一样的,任意一个发生了变化,其他的也跟着变化。
什么是深拷贝
创建一个新的变量,变量的值与之前变量的值一样,但是地址不一样,修改后不会影响另一个值。(改旧的不影响新的,改新的不影响旧的。)
如何实现深拷贝
方法一 用第三方库
Lodash _.cloneDeep() Method
Ramda-clone
社区还有很多其他的,上面是比较经典常用的。
方法二 Json 方法,stringify + Parse 组合使用
先用 stringfy 把 object 压成 string,然后用 parse 解析
局限性比较大,不建议用。
具体原因:
日期转成字符串,用 parse 再转回去需要自己做处理
比较脆弱,容易报错,要做异常处理
特殊的数值会转成 null,比如 NaN Infinity
等等
总结来说就是:
容易报错
容易丢失值
方法三 尝试自己实现
参考深拷贝的定义自己实现就可以了。关键词深度优先遍历。
也可以看看 lodash 的源码