从根本意义来说,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,这种基础数据类型有效。但若该对象中有属性对应的是方法的话。就无效。复制后的值方法无效。
递归
采用递归的方式是最有效的深复制的方式。能够很好的避免以上的情况。