数组和对象之间的赋值都是浅拷贝。因为会相互影响。
解构赋值在数组是一维数组时可以勉强看作是深拷贝,但是多维数组进行结构赋值依然是浅拷贝。
常用的深拷贝方法:
新数组=JSON.parse(JSON.stringify(数组))
将对象转换为json字符串形式再将转换而来的字符串转换为原生js对象
标准的深拷贝:
function deepClone(source) {
//判断拷贝的要进行深拷贝的是数组还是对象,是数组的话进行数组拷贝,对象的话进行对象拷贝
const sourceClone = source.constructor === Array ? [] : {};
for (let key in source) {
if (source.hasOwnProperty(key)) {
// 引用数据类型
if (source[key] && typeof source[key] === "object") {
//sourceClone[key] = source[key].constructor===Array?[]:{};
//递归
sourceClone[key]=deepClone(source[keys])
} else {
// 基本数据类型直接赋值
sourceClone[key] = source[key];
}
}
}
return sourceClone
}