递归实现:
/**
* 深拷贝
* @param {*} obj
* @returns
*/
function deepClone(obj={}){
// 存储当前层数据
let result;
// 不是对象、数组 或者为null,那么直接返回
if(typeof obj !=='object' || obj==null)
return obj;
if(obj instanceof Array)
result=[];
else
result={};
// 数组、对象都可用 for in 遍历,数组的key是索引值
for(let key in obj){
// 保证key是obj自己身上的属性,而不是其原型对象上的属性
if(obj.hasOwnProperty(key)){
// 递归调用
result[key]=deepClone(obj[key]);
}
}
// 返回当前层数据
return result;
}
注意:只有判断是否为null时使用==null(因为null==undefined-->true),其他判断是否相等的都用===,因为==会发生强制类型转换,只判断转换后的值是否相等;而===会判断类型是否相同,类型相同才会判断值是否相等。
本文详细介绍了JavaScript中实现深拷贝的方法,通过递归方式处理复杂数据结构,确保拷贝后的对象与原对象完全独立。内容包括深拷贝的原理、递归实现步骤以及在处理数组和对象时的注意事项,帮助开发者更好地理解和运用深拷贝技术。
&spm=1001.2101.3001.5002&articleId=121525870&d=1&t=3&u=d3a26018774b45c485d361445e6a6ece)
1万+

被折叠的 条评论
为什么被折叠?



