浅拷贝,比如浅拷贝对象A时,对象B将拷贝A的所有属性,如果属性是引用类型,B将拷贝地址,若果属性是基本类型,B将复制其值。浅拷贝的缺点是如果你修改了对象B中引用类型属性,你同时也会影响到对象A。
深拷贝会完全拷贝所有数据,优点是拷贝双方不会相互依赖,比如修改了一方的引用类型属性,不会影响到另一方。缺点是拷贝的速度更慢,代价更大 (我的理解是耗费了更多内存空间)。
浅拷贝实现
1、使用 ES6 的 Object.assign,其内部实现就是浅拷贝,并剔除了目标对象的原型方法
let a = { |
2、遍历对象属性
function shallowClone(obj) { |
深拷贝实现
1、利用 JSON 序列化实现一个深拷贝,缺点是无法复制函数,并且丢失抛弃对象的 constructor 和原型链
function deepClone(obj) { |
2、利用递归实现深拷贝,可以复制函数,同样会丢失抛弃对象的 constructor 和原型链,但是对于拷贝 json 对象的话足够了
function deepCopy(src) { |