js实现深拷贝的几种方法

JavaScript018

js实现深拷贝的几种方法,第1张

简单来说,深拷贝主要是将另一个对象的属性值拷贝过来之后,另一个对象的属性值并不受到影响,因为此时它自己在堆中开辟了自己的内存区域,不受外界干扰。

浅拷贝主要拷贝的是对象的引用值,当改变对象的值,另一个对象的值也会发生变化。

使用 js ON.stringify和 js ON.parse实现深拷贝:JSON.stringify把对象转成字符串,再用JSON.parse把字符串转成新的对象;

缺陷:它会抛弃对象的 const ructor,深拷贝之后,不管这个对象原来的构造 函数 是什么,在深拷贝之后都会变成Object;这种方法能正确处理的对象只有 Number, String, Boolean, Array, 扁平对象,也就是说,只有可以转成JSON格式的对象才可以这样用,像function没办法转成JSON;

递归拷贝实现深拷贝,解决循环引用问题

可以利用JS中的for in语法进行处理,具体如下:

//要复制的原对象

var destobj={ colkey: "col", colsinfo: "NameList" }

//复制的目标对象

var myobj=new Object()

for(var om in myobj)

{

var name=om//属性名称

var value=destobj[om]//属性对应的值

myobj[name]=destobj[om]

}