深拷贝与浅拷贝是一个针对数组和对象的概念,由于在JS中数组或对象存储的都是一个地址值,地址指向的才是存储数组或对象的内存空间,所以如果直接为数组或对象赋值的话赋值的为地址值,当改变一个新赋值的对象时,由于指向的是同一个实际对象,所以当改变一个对象的值所有的都会改变
浅拷贝
浅拷贝可以用Object对象自带的assign方法拷贝,但是只能拷贝第一层的值,值有对象或数组,拷贝来的为地址值
深拷贝
深拷贝用for in循环和递归函数实现
function deepCopy(newobj,obj){
for(k in obj){
if(obj[k] instanceof Array){
newobj[k]=[]
copy(newobj[k],obj[k]);
}else if(obj[k] instanceof Object){
newobj[k]={};
copy(newobj[k],obj[k]);
}else{
newobj[k]=obj[k]
}
}
}