像数组、对象这些变量,我们将其直接赋值给另一个变量,不论改变哪一个变量的值,另一个也会随之改变。
let obj1={name:'a'}
let obj2=obj1
obj2.name='b'
console.log(obj1.name)// b
为解决这些问题,我们可以采用以下方法。
1、
function deepClone(data){
if(typeof data ==='object' && !(data instanceof RegExp) && !(data instanceof Date) && !(data instanceof Array)){
var obj={}
}else if(typeof data ==='object' && data instanceof Array){
var obj=[]
}else{return data}
if(obj instanceof Array){
data.forEach(element => {
obj.push(deepClone(element))
});
}else{
for(var index in data){
obj[index]=deepClone(data[index])
}
}
return obj
}
let arr={name:'aa',arr1:{name:'bb'},arr2:['ab','c'],
func:function(){console.log('aa')}
}
let newArr=deepClone(arr)
2、当要拷贝的变量中没有function、Date对象时,也可以用JSON解析和反解析来完成。
let arr={name:'aa',arr1:{name:'bb'},arr2:['ab','c'],}
let newArr=JSON.parse(JSON.stringify(arr))