1.JSON方法序列化与反序列化
let copy=JSON.parse(JSON.stringify(obj))
缺点:
1.不能拷贝函数,日期对象会变成字符串,正则表达式也会拷贝出错(拷贝后变成一个对象)
2.值为undefined的属性在拷贝过程会被忽略掉,不能拷贝原型链上的属性与方法
3.无法处理循坏引用的情况
2.Object.assign(target,source1,source2) 属于浅拷贝
缺点:如果对象的某个属性值为引用类型,那么拷贝的则是引用地址
3.递归函数拷贝
function deepClone(target){
if(typeof target !=='object' || target===null){
return target
//typeof number string boolean bigint undefined function
}
if (target instanceof Date) {
return new Date(target.getTime());
}
if (target instanceof RegExp) {
return new RegExp(target);
}
let copyObj=Array.isArray(target)?[]:{}
for(let key in target){
if(target.hasOwnProperty(key)){
copyObj[key]= deepClone(target[key])
}
}
return copyObj
}