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

深拷贝和浅拷贝

作者: blueblue_c41a | 来源:发表于2017-09-09 13:52 被阅读0次
    首先深复制和浅复制只针对像 Object, Array 这样的复杂对象的。简单来说,浅复制只复制一层对象的属性,而深复制则递归复制了所有层级。

    一、浅拷贝

    在有指针的情况下,浅拷贝只是增加了一个指针指向已经存在的内存,改变newArr,arr也会变化

    const arr = [1, 2, 3];
    const newArr = arr;    // 直接复制
    
    newArr.reverse();  // [3,2,1]
    arr // [3,2,1]
    

    二、深拷贝

    深拷贝就是增加一个指针并且申请一个新的内存,使这个增加的指针指向这个新的内存,采用深拷贝的情况下,释放内存的时候就不会出现在浅拷贝时重复释放同一内存的错误。

    const arr = [1, 2, 3];
    
    // 通过JSON.parse,JSON.stringify进行深拷贝
    const newArr = JSON.parse(JSON.stringify(arr));
    
    newArr.reverse();  // [3,2,1]
    arr // [1,2,3]
    

    三、举例

    例1:仅仅复制对象的值

    var o = {a: 1};
    
    Object.keys(o)   // ['a']
    
    o.hasOwnProperty('a')   // true
    
    var d = {a:o.a}
    
    d  // {a: 1}
    
    d.a = 4;
    
    d  // {a: 4}
    
    a  // {a: 1}
    

    例2:通过深拷贝创建一个属性值一样内存不一样的对象

    var e = JSON.parse(JSON.stringify(o))
    
    e  // {a: 1}
    
    e.a = 3;
    
    e // {a: 3}
    
    o // {a: 1}
    

    相关文章

      网友评论

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

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