基本概念
浅拷贝:只拷贝基本数据类型,对于引用数据类型拷贝的是它的地址
深拷贝:将原对象的所有数据都进行拷贝,并且开辟新的内存空间
浅拷贝的几种方式:
- 直接赋值
- 使用Object.assign(origin,target1,target2)
- 使用Array.slice/concat
- 使用扩展运算符...
- 使用jQuery中的$.extend([deep],target,object1,[object2...]),deep为false时为浅拷贝
深拷贝的几种方式:
- 使用JSON.parse(JSON.stringify(target)),只能对对象或者数组使用
- 使用jQuery中的$.extend([deep],target,object1,[object2...]),deep为true时为深拷贝
- 手写递归实现
function deepClone(target){
let result;
// 如果为对象
if(typeof target === 'object'){
//是否为数组
if(Array.isArray(target)){
result = [];
for(let i in target){
result.push(deepClone(target[i]));
}
}else if(target === null){
result = null;
}else if(target.construct === RegExp){
result = target;
}else if(target.construct === Date){
result = target;
}else{
result = {};
for(let i in target){
result[i] = deepClone(target[i])
}
}
}else{//不为对象直接赋值
result = target
}
return result;
}