zoukankan      html  css  js  c++  java
  • 深拷贝和浅拷贝

    /*
    1、值传递
    2、引用传递
    */

    var a = 10;
    var b = a;
    b++;
    //console.log(a,b)//a:10 b:11


    var arr = [10,20,30,40];
    var arr1 = arr;
    arr1[0] = 40;
    //console.log(arr,arr1);//[40,20,30,40] [40,20,30,40]


    /*
    浅拷贝:
    当一个对象拷贝另一个对象的数据的时候,只要一个对象的数据发生改变另一个对象的数据也会发生改变
    因为浅拷贝拷贝的是引用的地址

    //ES6 Object.assign()
    参数1:target
    参数2:对象......
    参数3:对象....
    。。。。。。。。。


    $.extend()
    除了可以给jquery对象扩展方法外还可以实现深浅拷贝

    1、布尔值 如果填true的情况下是深考贝 什么也不写就是浅拷贝
    2、目标对象
    3......后面所有的对象 都是需要合并的对象

    //第一种方式 要求对象必须是多层的状态下才能实现浅拷贝
    var obj = {a:{name:"宋磊",age:19}};

    var obj1 = Object.assign({},obj);
    obj1.a.name="王多"
    console.log(obj1)
    console.log(obj)

    //第二种方式 要求对象必须是多层的状态下才能实现浅拷贝
    var obj = {a:{name:"宋磊",age:19}};
    var obj2 = {a:1,b:2,c:3};
    function copy(obj){
    var newObj = {};
    for(var key in obj){
    newObj[key] = obj[key];
    }

    return newObj;
    }

    var obj1 = copy(obj);
    obj1.a.name="王多"
    console.log(obj1)
    console.log(obj)

    第三种方式
    var obj = {a:{name:"宋磊",age:19}};
    var obj1 = {b:{name:"王多",age:19}};

    var obj2 = $.extend({},obj,obj1)
    obj2.a.name="胡正阳";
    console.log(obj2)
    console.log(obj)
    */

    /*
    深拷贝
    当一个对象拷贝另一个对象的数据的时候,其中一个对象的数据发生变化不会影响另一个对象的数据
    因为深考贝拷贝的是对象的数据而不是地址

    第一种方式 对象是单层的情况下
    //Object.assign()
    var obj = {a:1,b:2,c:3}
    var obj1 = Object.assign({},obj);
    obj1.a = 30;
    console.log(obj1,obj)

    第二种 差不多比较完美
    var obj = {a:{name:"宋磊",age:19}};
    var obj1 = {b:{name:"王多",age:19}};
    var obj2 = $.extend(true,{},obj,obj1);
    obj2.a.name="胡正阳";
    console.log(obj2)
    console.log(obj)


    第三种
    JSON.parse
    JSON.stringfiy
    var obj1 = {b:{name:"王多",age:19,show:function(){}}};
    var obj2 = JSON.parse(JSON.stringify(obj1));
    obj2.b.name = "宋磊";
    console.log(obj1,obj2)

    function copy(obj){
    var newObj = {};
    for(var key in obj){
    if(typeof obj[key] == "Object"){
    return copy(obj[key])
    }
    }
    }

    */

  • 相关阅读:
    gitlab Failed to register this runner. Perhaps you are having network problems runner 注册失败问题解决
    gitlab pipelines 使用
    centos 7 bbr 安装
    kafka ksql && docker 安装试用
    netflix vector 系统性能监控安装使用
    keycloak && docker安装 &&spring boot 集成使用
    gogs docker 安装
    alpine docker 镜像 时区问题
    nginx 流量拷贝模块 ngx_http_mirror_module 安装试用
    ulimit  设置
  • 原文地址:https://www.cnblogs.com/carolavie/p/9750758.html
Copyright © 2011-2022 走看看