浅拷贝
- 以赋值的形式拷贝引用对象。仍指向同一个地址。基本数据类型拷贝后两个变量互不干扰;引用数据类型在浅拷贝的过程中因仅改变了引用的指针,所以修改原对象时,赋值对象也会有影响
- 实现方法
- ES6的新函数:Object.assign()
 Object.assign(target, ...sources) 
// target目标对象;  sources:任意多个源对象
let a = { age: 1 }
let b = Object.assign({}, a)
a.age = 2
console.log(b.age) // 1
 
- 展开运算符 ...
let a = { age: 2 }
let b = { ...a }
a.age = 3
console.log(b.age) // 2
 
深拷贝
- JSON.parse(JSON.stringify(object)) 性能最快
 存在的问题:当拷贝具有循环引用对象的时候会报错,当值为序列化函数,undefined,symbol时不能拷贝。
- 递归深拷贝
function deepClone (obj){
  let objClone = Array.isArray(obj)?[]:{};
  if(obj && typeof(obj) === 'object'){
    for(key in obj){
      if(obj.hasOwnProperty(key)){
        //判断子项是否为对象,如果也是对象则递归
        if(obj[key]&& typeof[key] === 'object'){
          objClone[key] = deepClone(obj[key])
        }else{
          objClone[key] = obj[key]
        }
      }
    }
  }
  return objClone
}