pwindy  
在完成任务的同时,还需要不断“复盘”,不论你多么的忙,都需要留下时间思考,可以思考哪些地方做的好,哪些地方我们可以改进,应该如何改进,注重总结才是王道

1.概念

浅拷贝——只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。

深拷贝——会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。

2.Object.assign()

2.1.基本用法:

     Object.assign(目标,数据1,数据2…);

 

复制代码
      //示例1
       let obj = {a:1}
       let newObj = Object.assign({},obj);
       console.log(newObj) //{a: 1}
 
      //示例2
       let obj1 = {name:"zhangsan"};
       let obj2 = {age:18};
       let obj3 = Object.assign({},obj1,obj2);
      console.log(obj3) //{name: "zhangsan", age: 18}
复制代码

2.2.常规用法

2.2.1.Object.assign()方法的第一个参数是目标对象,后面的参数都是源对象,Object.assign()方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。

        var obj = {};
        var o1 = { a: 1 };
        var o2 = { b: 2 };

        var obj = Object.assign(obj, o1, o2);
        console.log(obj); // { a: 1, b: 2 }

 

注意:如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性。

        const target = { a: 1, b: 1 };
        const source1 = { b: 2, c: 2 };
        const source2 = { c: 3 };

        Object.assign(target, source1, source2);
        console.log(target); // {a:1, b:2, c:3}

 

Object.assign() 方法可以把任意多个的源对象自身的可枚举属性拷贝给目标对象,然后返回目标对象。但是 Object.assign() 进行的是浅拷贝,拷贝的是对象的属性的引用,而不是对象本身。

        var obj = { a: {a: "kobe", b: 39} };
        var initalObj = Object.assign({}, obj);
        initalObj.a.a = "李世民";
        console.log(obj.a.a); // 李世民

 

注意:当obj(源对象)只有一层的时候,是深拷贝

        let obj = {
           username: 'kobe'
        };
        let obj2 = Object.assign({},obj);
        obj2.username = '李世民';
        console.log(obj);//{username: "kobe"}

2.2.2.Object.assign是浅拷贝还是深拷贝的问题

即:第一级属性深拷贝,从第二级属性开始就是浅拷贝。

复制代码
       //示例1  一层深拷贝
        let obj = {a:1}
        let newObj = Object.assign({},obj);
        console.log(newObj); //{a: 1}
        newObj.a=2;
        console.log(obj); //{a:1}
        console.log(newObj); //{a: 2}
 
       //示例2  二层浅拷贝
        let obj = {a:1,b:{name:"zhangsan"}}
        let newObj = Object.assign({},obj);
        console.log(newObj); //{a:1,b:{name:"zhangsan"}}
        newObj.b.name="lisi";
        console.log(obj); //{a:1,b:{name:"lisi"}}
        console.log(newObj); //{a:1,b:{name:"lisi"}}
复制代码

3.总结

1.用 JSON.stringify 把对象转换成字符串,再用 JSON.parse 把字符串转换成新的对象,但是需要注意的是,可以转成 JSON 格式的对象才能使用这种方法,如果对象中包含 function 或 RegExp 这些就不能用这种方法了。

2.Object.assign()拷贝当对象中只有一级属性,没有二级属性的时候,此方法为深拷贝,但是对象中有对象的时候,此方法,在二级属性以后就是浅拷贝。

 

参考---https://blog.csdn.net/weixin_44867717/article/details/121121269

posted on   pwindy  阅读(387)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
历史上的今天:
2021-10-11 在vue项目中引入vue-router并使用
2021-10-11 关联本地代码的方式 HTTPS和SSH---Gitee码云
2020-10-11 axios POST提交数据的三种请求方式写法
 
点击右上角即可分享
微信分享提示