2018-03-21 JS深拷贝和浅拷贝

var a = 1;        //        a === 1
b = a;            //        b === 1
b = 2;            //        b === 2,a === 1

这就是深拷贝,意思是拷贝之后,改变其中一个值的同时并不改变另一个值。

除了object以外的数据类型,赋值都是深拷贝

var a = {
    name: ' pyz'
}
b=a;
b.name = 'jpj'        //        这时a和b都改成了jpj

这就是浅拷贝,赋值时只能把地址赋过去,并没把heap内存里的东西赋给b。

1. 实现深拷贝

  1. 用JSON深拷贝
let a = {...}
let b = JSON.parse(JSON.stringify(a))

但这个方法不支持函数、引用、undefined、正则...

  1. 递归拷贝
var china = {
  nation : '中国',
  birthplaces:['北京','上海','广州'],
  skincolr :'yellow',
  friends:['sk','ls']
}
//深复制,要想达到深复制就需要用递归
function deepCopy(o,c){
  var c = c || {}
  for(var i in o){
    if(typeof o[i] === 'object'){  //要考虑深复制问题了
      if(o[i].constructor === Array){
      //这是数组
        c[i] =[]
      }else{
      //这是对象
        c[i] = {}
      }
      deepCopy(o[i],c[i])
    }else{
      c[i] = o[i]
    }
  }
  return c
}
var result = {name:'result'}
result = deepCopy(china,result)
console.dir(result)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 本文思维导图如下: 本文首发于我的个人网站: http://cherryblog.site/本文作者: Cherr...
    sunshine小小倩阅读 4,662评论 2 14
  • 前言 本文主要简单讲一下什么是浅拷贝、什么是深拷贝、深拷贝与浅拷贝的区别,以及怎么进行深拷贝和怎么进行浅拷贝。 一...
    王阿王阅读 1,873评论 0 0
  • 最全的iOS面试题及答案 iOS面试小贴士 ———————————————回答好下面的足够了-----------...
    大罗Rnthking阅读 4,565评论 0 2
  • 生活就是一面镜子吧,让你可以看看自己,见见自己,笑一笑,哭一哭,至于是左是右,却总是让人大费脑筋,生活有时候更像是...
    林有朽木阅读 3,335评论 2 4
  • 我曾经因为一座城爱上了一个人,又因为一个人放弃了一座城,人和城我都没有再见到,后来我大病一场,忘记了那个人和那座城...
    深巷梨花阅读 2,563评论 0 0

友情链接更多精彩内容