js 中 基本类型(原始值) 进行拷贝,拷贝的是值,而 引用类型(非原始值) 浅拷贝拷贝的是地址,所以修改拷贝后的值,会影响到原值,所以要进行深拷贝
深拷贝:拷贝的是引用类型(非原始值)的值,修改拷贝后的值,不会影响到原值。
浅拷贝:拷贝的是引用类型(非原始值)的值,修改拷贝后的值,会影响到原值。
深拷贝:主要针对对象和数组进行。
此方法:利用函数递归实现引用类型中嵌套各种数据类型的深拷贝,无论嵌套多少层,都会完整的拷贝
function deepClone(value) {
// 非原始值的情况
// 数组
if (value instanceof Array) { // 判断传入的值是不是数组,如果是,则进行拷贝数组里面的值
let colone = [];
for (let i = 0; i < value.length; i++) {
colone[i] = deepClone(value[i]); // 利用递归 对新数组里面的内容在进行克隆
}
return colone;
}
if (value instanceof Object) { // 判断传入的值是不是对象,如果是,则进行拷贝对象里面的值
let colone = {}
for (var key in value) {
colone[key] = deepClone(value[key]); // 利用递归 对对象里面的内容在进行克隆
}
return colone;
}
return value
}
let arr = [{a:1,b:2},3,[4,5,6]]
let newArr = deepClone(arr)
console.log(newArr===arr);//false
newArr = []
console.log(arr);```