踩坑对象深复制

294 阅读1分钟

从根本意义来说,js深复制除了递归其他全是浅复制。

常用几大复制方法

对象的扩展运算符:...

json转化:JSON.parse(JSON.stringfy(OBject))

对象方法复制:Object.assign()

JQ复制方法:$.extend()。

对象的扩展运算符

常用情景:

数据定义:


对第一层,第二层数据修改:


在修改第一层数据时,两个数据是不同步的,而第二层数据修改时,则是同步。

原因:扩展运算符,只会对对象进行第一层数据深复制,若对象中还有其他对象,只会深复制当前属性对象的地址。所以从根本意义上来说,对于只有一层数据的对象来说i,其为深复制。而其他则并无作用。

Object.assign

改方法作用同扩展预算符一致。

JSON.parse(JSON.stringfy)




JSON.parse(JSON.stringfy())改方法从本质意义上来说,先将对象转化为String,之后再新建一个对象。该方式能够完全脱离复制对象,能够实现深复制。但该方式只对于属性中只有Number,String,Object,Array,这种基础数据类型有效。但若该对象中有属性对应的是方法的话。就无效。复制后的值方法无效。

递归

采用递归的方式是最有效的深复制的方式。能够很好的避免以上的情况。