码迷,mamicode.com
首页 > 编程语言 > 详细

【深度复制的坑】1、对象assign复制的假深度,2、数组slice复制的坑,3、还有数组map复制的坑

时间:2017-11-22 22:01:01      阅读:290      评论:0      收藏:0      [点我收藏+]

标签:浅拷贝   改变   bsp   也会   col   assign   导致   span   sig   

1、对象复制的坑 Object.assign()

Object.assign()  //浅复制 基本没用 跟直接用= 一样

Object.assign(true,{}) // 以为是深拷贝,其实只是一级属性复制,比浅拷贝多深拷贝了一层而已。第二层一样是浅拷贝,会改变原值

 

2、数组复制的坑,即使是slice复制,如果内部是对象的话,还是会地址指向,导致修改新数组的时候,老数组也改变

var arr = [{a:11},{a:11}];  //arr [{a:11},{a:11}]
var arr1 = arr.slice(0);   //arr1 [{a:11},{a:11}]
arr1[0].a = 22  
//以为arr不会跟着改变,结果竟然变了 
//arr1 [{a:22},{a:11}]  arr [{a:22},{a:11}]

结果证明,slice复制只是潜复制,不能深度复制对象内容

 

3、同样是数组复制的坑,如果数组内容元素是对象的话,map也会改变改变原值的

var arr = [{a:11},{a:11}]; //arr  [{a:11},{a:11}]
arr.map(v=>{
  v.b=22;
  return v;
}) 
//是不是以为这根arr没半毛钱关系,你太天真了,arr已经改变
//arr  [{a:11,b:22},{a:11,b:22}]  已经多出来了个b属性。。。。

 

【深度复制的坑】1、对象assign复制的假深度,2、数组slice复制的坑,3、还有数组map复制的坑

标签:浅拷贝   改变   bsp   也会   col   assign   导致   span   sig   

原文地址:http://www.cnblogs.com/liujinyu/p/7880848.html

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