实现对象的深拷贝
1. 最有效并且通⽤的⽅法是使⽤递归
function deepClone(source){
const targetObj = structor === Array ? [] : {}; // 判断复制的⽬标是数组还是对象
for(let keys in source){ // 遍历⽬标
if(source.hasOwnProperty(keys)){
if(source[keys] && typeof source[keys] === 'object'){ // 如果值是对象,就递归⼀下
targetObj[keys] = source[keys].constructor === Array ? [] : {};
targetObj[keys] = deepClone(source[keys]);
}else{ // 如果不是,就直接赋值
targetObj[keys] = source[keys];
}
}
}
return targetObj;
}
2.JSON.stringify/parse的⽅法
undefined、function、symbol 会在转换过程中被忽略。。所以只适⽤于⼀些简单的对象const cloneArray = JSON.parse(JSON.stringify(originArray));
3.数组的concat和slice
只能实现第⼀层的深拷贝
const originArray = [1,[1,2,3],{a:1}];
const cloneArray = at();
console.log(cloneArray === originArray); // false
cloneArray[1].push(4);
cloneArray[2].a = 2;
console.log(originArray); // [1,[1,2,3,4],{a:2}]
const originArray = [1,[1,2,3],{a:1}];
const cloneArray = originArray.slice();
console.log(cloneArray === originArray); // false
cloneArray[1].push(4);
typeof arraycloneArray[2].a = 2;
console.log(originArray); // [1,[1,2,3,4],{a:2}]
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论