深拷贝与浅拷贝

99 阅读1分钟

深拷贝和浅拷贝是只针对Object和Array这样的引用数据类型的。
浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。但深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。
Object.assign() 方法可以把任意多个的源对象自身的可枚举属性拷贝给目标对象,然后返回目标对象。但是 Object.assign() 进行的是浅拷贝,拷贝的是对象的属性的引用,而不是对象本身。
浅拷贝

var obj = { a: {
              a: "wx",
              b: 18
              } 
          };
var obj2 = Object.assign({}, obj);
obj2.a.a = "li";
console.log(obj.a.a); // li

深拷贝

let obj = {
   name: 'wx'
};
let obj2 = Object.assign({},obj);
obj2.name = 'ww';
console.log(obj);//{name: "wx"}

当object只有一层的时候,是深拷贝