js深拷贝的理解及三种深拷贝方法

因为原始类型的拷贝是传值,所以对于原始数据类型并没有深浅拷贝的区别。深拷贝是针对引用数据类型对象,数组和函数数的全拷贝,并且不会影响的原有数据单独存在。

深拷贝的使用场景:1、都是复杂对象,即对象的属性还是对象

如果要赋值对象的所有属性都不是引用类型的时候,可以使用浅拷贝,遍历并复制。

实现深拷贝的方法一:递归

function deepClone(obj){

    let _obj = JSON.stringify(obj),

        objClone = JSON.parse(_obj);

    return objClone

}   

let a=[0,1,[2,3],4],

    b=deepClone(a);

a[0]=1;

a[2][0]=1;

console.log(a,b);//a:[0,1,[1,3],4],b:[0,1,[2,3],4]
实现深拷贝的方法二:JSON对象的parse和stringify

function deepClone(obj){

    let _obj = JSON.stringify(obj),

        objClone = JSON.parse(_obj);

    return objClone

}   

let a=[0,1,[2,3],4],

    b=deepClone(a);

a[0]=1;

a[2][0]=1;

console.log(a,b);//a:[0,1,[1,3],4],b:[0,1,[2,3],4]

实现深拷贝的方法三:JQ的extend方法

    $.extend( [deep ], target, object1 [, objectN ] )

    deep表示是否深拷贝,为true为深拷贝,为false,则为浅拷贝

    target Object类型 目标对象,其他对象的成员属性将被附加到该对象上。

    object1  objectN可选。 Object类型 第一个以及第N个被合并的对象。
let a=[0,1,[2,3],4],

    b=$.extend(true,[],a);

a[0]=1;

a[2][0]=1;

console.log(a,b);//a:[0,1,[1,3],4],b:[0,1,[2,3],4]

理解借鉴地址:https://www.cnblogs.com/echolun/p/7889848.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容