深拷贝与浅拷贝
作者:互联网
深拷贝:拷贝后的结果更改是不会影响拷贝前的,拷贝前后是没有关系的
浅拷贝:改变拷贝前的内容,会对拷贝后的内容有影响,拷贝前和拷贝后是有关系的,即只是引用关系
//引用关系 只拷贝一层
深拷贝方法一
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