什么是深拷贝?
深拷贝就是将数据完完整整的拷贝一份,修改其中任何一个都不会对另外一个产生影响
什么是浅拷贝?
浅拷贝就是虽然也是拷贝了一份数据,但是用的是同一个指针,修改其中一份数据里任何的东西都会改变另一份数据,相当于在操作同一份数据,相互影响
常用的深拷贝方式
- { …} 解构
Object.assign( )
- 对于Object.assign()而言,如果对象的属性值为简单类型(string,number),通过Object.assign({},srcobj);得到的新对象为深拷贝;如果属性值为对象或其他引用类型,那对于这个对象而言其实是浅拷贝的,这是Object.assign()特别需要注意的地方
let srcObj = {'name': 'lilei', 'grade': {'chi':"80", 'eng':"100"}};
let copyObj2 = Object.assign({}, srcObj);
copyObj2.name="zhangsan";
copyObj2.grade.chi="50";
console.log('srcObj', srcObj); //name: "lisi" grade: {chi: "50", eng: "100"}
console.log('copyObj2', copyObj2); //name: "zhangsan" grade: {chi: "50", eng: "100"}
————————————————
版权声明:本文为CSDN博主「你好像很好吃a」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44296929/article/details/103879019
- 对于Object.assign()而言,如果对象的属性值为简单类型(string,number),通过Object.assign({},srcobj);得到的新对象为深拷贝;如果属性值为对象或其他引用类型,那对于这个对象而言其实是浅拷贝的,这是Object.assign()特别需要注意的地方
Object.create( ) 该方法比较特殊,虽然也是浅拷贝,但是如果修改被拷贝对象的第一层,那么拷贝的那一份也会被修改
var obj1 = {
a: 1,
b: 2,
c: {
d: 3,
},
};
var obj2 = Object.create(obj1);
// obj2.a = 3;
obj2.c.d = 4;
obj1.a = 123;
console.log(obj1);
console.log(obj2.a);
以上代码,obj2拷贝了obj1,如果修改obj2的第一层那么obj1不会受到影响,但是如果修改obj1,那么obj2也会修改,算是特殊情况吧! 目前所掌握的只允许我这么理解!!!