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 的深复制

你可能感兴趣的:(JavaScript深复制浅复制)