javascript值的拷贝(深拷贝,浅拷贝)

javascript深拷贝的两种方法

值拷贝原理:依次去给对象属性进行赋值。
拷贝值为基本类型时:修改拷贝的变量后。原先的值不会被修改
拷贝值为引用类型时:修改拷贝的变量后。原先的值会被修改,因为它拷贝的是其地址,而不是值。

在拷贝值为引用类型时,我们会发现修改拷贝的变量后,会影响原对象中引用类型的属性。如果要避免此效果,我们就需要对其进行深拷贝。以下是深拷贝的两种方法:

一,for in循环 + 递归函数实现,代码如下:
javascript值的拷贝(深拷贝,浅拷贝)
ps:for in循环既能遍历对象也能遍历数组,通过循环依次赋值,需要引用类型就调用自身进行递归

二,通过JSON 的两种方法,JSON.stringify() && JSON.parse()
javascript值的拷贝(深拷贝,浅拷贝)
这里我们通过JSON文件转换中得到的 newObj就是一个深拷贝对象了
但是注意:此方法不能实现obj中带有函数方法的对象。因为JSON转换过程中会忽略值为方法的键值对。