JavaScript深复制浅复制

浅复制

  • 只是复制了引用,复制前后都指向同一个对象,彼此之间会相互影响
let o ={a:1}
let o1 = o;
console.log(o1 === o);   //true
o1.a=2;
console.log(o.a);       //2

深复制

  • 在堆中重新分配内存,复制前后指向不同对象,彼此之间不会影响
  • 如果源对象存在对象或数组属性,需要递归进行复制

实现方式

  • 利用JSON对象中的parse,stringify
  • 可以克隆变量,数组与JSON对象
  • jQuery中的$.extend({}, x)进行浅复制,$.extend(true, {}, x)进行深复制
  • 可以克隆变量,函数,数组与JSON对象
  • lodash库的_.clone进行浅复制_.cloneDeep进行深复制
  • 可以克隆变量,函数,数组与JSON对象

总结

  • 浅复制时,新对象和原对象的所有成员都相等
  • 深复制时,新对象和原对象函数和字符串相等,对象和数组因为指向不同,所以不等
  • demo地址

参考文章推荐:
深入剖析 JavaScript 的深复制

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 值类型与引用类型 谈浅拷贝与深拷贝之前,我们需要先理清一个概念,即值类型与引用类型。 什么是值类型与引用类型?这要...
    franose阅读 624评论 1 8
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,200评论 30 471
  • underscore 的源码中,有很多地方用到了 Array.prototype.slice() 方法,但是并没有...
    theCoder阅读 604评论 0 1
  • 有一场雨 滂沱倾盆 在梦里在夜里 在他们的故事里 咽下 无语 退后三里 有一场雨 滂沱倾盆 万钧之力落心地 冲出此...
    灵山阅读 191评论 0 0
  • @许铎 惊蛰春分,相继而下。红云染就相知纱。如火似彤,如花似霞,怎生拉扯分开挂?杨柳含烟青青如乍。他念着咱,咱何曾...
    许铎阅读 338评论 0 0