美文网首页
JS的深拷贝和浅拷贝

JS的深拷贝和浅拷贝

作者: 初级切图仔 | 来源:发表于2019-09-27 16:18 被阅读0次

    深拷贝与浅拷贝的区别:例如B复制了A,如果A改变了,B也跟着改变,则是浅拷贝;如果A改变了,B没有改变,则是深拷贝。

    深拷贝会拷贝所有层级的属性

    (1).JSON.stringfy和JSON.parse来回转换一次可以实现深拷贝;

    代码示例:

    let a = [1,2,3,[4,5],6]; //多层数组

    let A = JSON.stringify(a); //JSON.stringify转换

    let b = JSON.parse(A);    //JSON.parse转换

    console.log(a,b)

    a[0] = 2;

    console.log(a,b);

    输入结果如图1,图2;

    图1 图2

    由此可见此次拷贝为深拷贝

    (2).使用递归循环来为数组赋值也可实现深拷贝

    let a = [1,2,3,4,5,[6,7],8,9];

    function deepClone(obj){

    let b = Array.isArray(obj)?[]:{};  //判断传入数据的格式是否为array

    for(key in obj){    //遍历数组

    if(obj[key] && typeof obj[key] === "object"){  //如果该索引下存在数据切类型为object,再次调用改函数来循环内部的数组

    b[key] = deepClone(obj[key]);

    }else{

    b[key] = obj[key]    //其他情况下为新数组赋值

    }

    }

    return b;    //返回递归完成的数据

    }

    let b = deepClone(a);

    console.log(a,b);

    a[0] = 2;

    a[5][0] = 1;

    console.log(a,b);

    输出结果如图3,图4;

    图3 图4

    由此可见,递归之后所得的数据为深拷贝。

    相关文章

      网友评论

          本文标题:JS的深拷贝和浅拷贝

          本文链接:https://www.haomeiwen.com/subject/najoectx.html