码迷,mamicode.com
首页 > 其他好文 > 详细

深拷贝和浅拷贝

时间:2020-06-26 01:26:14      阅读:59      评论:0      收藏:0      [点我收藏+]

标签:content   let   复制   OLE   深拷贝   内存地址   也会   const   它的   

1、浅拷贝就是值的复制。对象因为是引用类型,所以它的值就是一个指针。当改变其中一个的时候,另一个也会改变。如下obj把它的指针复制给obj1 ,所以这两个对象指向同一个内存地址。当改变obj1的a属性后,obj的属性a也会发生变化。这就是浅拷贝。

let obj1 = {a:1};
let obj2 = {b:2};
obj2.__proto__ = obj1;
let obj3 = {...obj2};
console.log(obj3);  //{b:2}

 






2、被拷贝的对象的第一层属性的属性值被改变不会影响到原对象,而第二层对象的属性值被改变会影响到原对象的属性值。意思是第一层是深拷贝第二层是浅拷贝。 第一层和第二层不一样是因为他们的类型不同,第一层是变量,它是简单数据类型,第二层是对象,是复杂数据类型,所以在第二层拷贝的时候,拷贝的是地址,所以会跟着发生变化,而第一层是变量,又重新开了一个空间,所以后面的改变不会影响前面的。


            //深浅拷贝
            const obj1 = {
                a:1,
                b:2,
                d:{
                    aa:11,
                    bb:22
                }
            };
            const obj2 = {
                c:3,
                d:9
            };
            const cObj1 = {...obj1};
            
            console.log(obj1.a);  //1
            cObj1.a = 0;
            //相互改变的只有引用类型,所以改变cObj1中的a属性,obj1中的是不会改变的
            console.log(obj1.a); //1
            
            //如果是直接赋值则会改变a的值,例如:
            const cObj1 = obj1;
            

 





深拷贝和浅拷贝

标签:content   let   复制   OLE   深拷贝   内存地址   也会   const   它的   

原文地址:https://www.cnblogs.com/rickdiculous/p/13193382.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!