您的当前位置:首页Object的复制

Object的复制

2022-01-09 来源:乌哈旅游
Object的复制

以前学习的对象的复制⽅法:

var obj={a:1,b:2}; for(var prop in obj){ o[prop]=obj[prop]; }

var obj={a:1,b:2}; var o={c:1};

//将{}对象中obj复制给o对象,重新设置了o的新的引⽤地址时obj复制并且赋值 var o={...obj}; obj.a=10;

console.log(o===o1);

assign()

ES6以后才有的⽅法

将obj的所有属性复制到o的属性上 Object.assign(o,obj); console.log(o);

将obj对象的所有属性复制到⼀个空对象的属性上,并且返回这个空对象 var o1=Object.assign({},obj); var o2={};

var o3=Object.assign(o2,obj); console.log(o2===o3);

Object.assign不能复制原型链属性 var o6=Object.assign({},o4); console.log(o6);

可以将多个对象的属性值复制到新对象中 var obj={a:1,b:2}; var o={c:1};

var o7=Object.assign({},obj,o); console.log(o7);

如果将多个对象复制到⼀个对象上时,如果有相同属性, 后⾯的对象会覆盖前⾯对象的相同属性 var obj={a:1,b:2}; var o={c:1};

var obj1={a:10,c:20,d:30}; var obj2={c:100,d:70,e:50};

var o8=Object.assign({},obj,obj1,obj2); console.log(o8);

Object.assign不能复制原型链,不可枚举属性 var arr=[1,2,3];

var arr1=Object.assign([,,,5],arr); arr[0]=10;

console.log(arr1);

深复制是对象当中的⼦元素、⼦对象和原来的对象都没有引⽤关系,⽽浅复制只有第⼀层有引⽤关系,以后各层都没有引⽤关系。——————————————————到此为⽌我们学过3种复制对象的⽅法,但是这三种仅能作为浅复制下⾯完成深复制

var o9=JSON.parse(JSON.stringify(obj));将对象变成字符串,再将字符串变为对象

分析:var obj={ a:1, b:2, c:{ d:3, e:4,

} }

这种只能浅复制,因为只遍历了第⼀层属性赋值。 var o={};

for(var prop in obj){ o[prop]=obj[prop]; }

// obj.a=10; // obj.c.d=10; console.log(o);

这种 完成了⼀种浅复制 var o={...obj}; obj.c.d=10; console.log(o);

这个也是浅复制

var o=Object.assign({},obj); obj.c.d=10; console.log(o);

这个是深复制,但是不可枚举属性和⽅法都⽆法进⾏复制 var o=JSON.parse(JSON.stringify(obj)); obj.c.d=10;

console.log(o);

原因:将obj的每⼀层全部都转换为字符串,因此将 obj.c.d=10;时,o结果的c的结果没有发⽣改变,已经将obj变成了字符串,然后再将字符串⽣成了新的对象,和原来的对象没有引⽤关系

但是这样做深复制也是不好的,不可美剧属性和⽅法都不能进⾏复制举例: var obj={ a:1, b:2, c:{ d:3, e:4,

f:function(){

console.log(\"aaa\"); } } }

var o=JSON.parse(JSON.stringify(obj)); obj.c.d=10; console.log(o);

运⾏结果:c当中少了⼀个f的⽅法。

因篇幅问题不能全部显示,请点此查看更多更全内容