js深拷贝与浅拷贝

358 阅读1分钟

JavaScript的数据类型分为基本数据类型和引用数据类型。深浅拷贝都是对于引用数据类型而言的,复杂的引用类型将地址存在 Stack 里,数据存在 Heap

浅拷贝即直接使用=赋值,只是对地址的复制,存在Heap中的数据是相同的.

深拷贝就是对目标的完全拷贝,不同的地址,指向Heap中不同的数据.

深拷贝可分为首层深拷贝与完全深拷贝,首层深拷贝是指对于多层嵌套的引用类型数据只对深拷贝首层数据,更深层的数据还是浅拷贝.如

  1. 数组的 concat 和 slice
  2. ... 展开运算符
  3. Underscore 的 _.clone()

目前实现完全深拷贝的方法主要是:

  1. 利用 JSON 对象中的 parse 和 stringify
  2. jquery的$.extend(true, {}, obj)
  3. lodash的_.cloneDeep和_.clone(value, true)。
  4. 利用递归来实现每一层都重新创建对象并赋值