其他分享
首页 > 其他分享> > 深拷贝与浅拷贝

深拷贝与浅拷贝

作者:互联网

深拷贝:拷贝后的结果更改是不会影响拷贝前的,拷贝前后是没有关系的
浅拷贝:改变拷贝前的内容,会对拷贝后的内容有影响,拷贝前和拷贝后是有关系的,即只是引用关系

//引用关系 只拷贝一层
深拷贝方法一

let obj={}
let o=JSON.parse(JSON.stringfy(obj))

缺点是只能解析json,对象里头的函数、undefined会不完整,不够靠谱

深拷贝靠谱方法 递归拷贝

function deepClone(obj,hash=new WeakMap()){
  if(obj == null) return obj; //如果是null或者undefined我就不进行拷贝
  if(obj instanceof Date)return new Date(obj);
  if(obj instanceof RegExp)return new RegExp(obj);
  if(typeof obj !=='object') return obj; //可能是对象 或者是普通的值 函数不需要深拷贝
  //是对象就要进行深拷贝
  if(hash.get(obj)) return hash.get(obj)
  let cloneObj=new obj.constructor;

  hash.set(obj,cloneObj)
  for(let key in obj){
    if(obj.hasOwnProperty(key)){
      //实现一个递归拷贝
      cloneObj[key]=obj[key]
    }
    
  }
return cloneObj;
}
let obj={name:1,address:{x:100}}
let d=deepClone(obj)

标签:return,cloneObj,let,new,obj,拷贝
来源: https://blog.csdn.net/hmmmmm/article/details/121365056