前端开发的过程中经常会遇到赋值操作,对于基本数据类型的赋值js会在堆内存内直接开辟一块新的空间用于新变量的指向;而对对象的赋值则只是将原有对象在堆中的地址赋值给新的变量,也就是我们常说的浅拷贝
对于深拷贝的需求,
不建议使用JSON.parse(JSON.stringify())(正则会被直接置空;函数会被处理为null)
我们可以引用lodash.js方法库或者在copy下面的代码
//params obj:目标值
deepClone(obj,hash = new WeakMap()){
// null
if(obj === null) return obj
// date
if(obj instanceof Date) return new Date(obj)
// reg
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] = deepClone(obj[key],hash)
}
}
return cloneObj
},