JS 实现深拷贝、浅拷贝的几种方法
2022-09-16 本文已影响0人
蕉下客_661a
对象深拷贝
第一种:使用递归的方法实现深拷贝
function deepClone(obj){
let objClone = Array.isArray(obj)?[]:{};
if(obj && typeof obj==='object'){
for(let key in obj){
if(obj[key] && typeof obj[key]==="object"){
objClone[key]=deepClone(obj[key])
}else{
objClone[key] = obj[key]
}
}
}
return objClone;
}
第二种:使用JSON.parse()和JSON.stringify()
JSON.parse(JSON.stringify(obj))
无法实现对象中方法的深拷贝
第三种:使用Object.assign()
Object.assign({},obj)
注意:只能深拷贝对象的一级属性,二级属性之后即为浅拷贝
数组的深拷贝
第一种:concat(arr1,arr2)
只有在数组元素是一维的时候,是深拷贝,一维以上是对值的引用
第二种:slice(idx1,idx2)
①没有参数的时候,是拷贝数组
②一个参数的时候,拷贝从起始位置到数组末尾的元素
③两个参数的时候,拷贝从起始位置到 结束位置的元素(不包含结束位置的元素,含头不含尾)
一维数组元素是深拷贝,数组元素二维以上是值的引用