美文网首页
关于arr和obj复制改变原数据的问题

关于arr和obj复制改变原数据的问题

作者: 索哥来了 | 来源:发表于2017-08-01 17:38 被阅读0次
    var arr = [1,2,3];
    var obj = {
        i : 1,
        j : 2
    }
    
    var arr1 = arr;
    arr1[1] = 11;
    console.log(arr);
    console.log(arr1);
    
    var obj1 =obj;
    obj1.i = 11;
    console.log(obj);
    console.log(obj1);
    

    运行结果:

    image.png
    我们发现,我们在改变arr1(obj1)后,原来的arr(obj)也跟着变了,原因是:复合类型的变量存的是指针
    解决办法:
    可能我们第一会想到的是遍历赋值,这样虽然能解决问题,但是却拉低了性能。
    在js里面,我们可以这样处理:数组用一个空数组连接,obj用一个空obj连接。
    var arr = [1,2,3];
    var obj = {
        i : 1,
        j : 2
    }
    
    var arr1 = arr.concat([]);
    arr1[1] = 11
    console.log(arr);
    console.log(arr1);
    
    var obj1 = Object.assign({},obj);
    obj1.i = 11;
    console.log(obj);
    console.log(obj1);
    

    运行结果:

    image.png

    相关文章

      网友评论

          本文标题:关于arr和obj复制改变原数据的问题

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