目录
1.浅拷贝和深拷贝的实现原理
- 浅拷贝:简单复制了变量的值(包括基本数据类型的值和引用数据类型的值都是直接复制)
- 深拷贝:基本数据类型的值直接复制,引用数据类型的值则根据这个引用数据类型对象生成一个新的对象,再将新对象的地址重新赋值。
区别:对于引用数据类型变量的值,浅拷贝直接将地址值复制过来,而深拷贝则是将原对象重新生成一个新对象,再将新对象的地址值复制过来。故浅拷贝的引用数据类型的变量指向的是同一个对象,而深拷贝则是分别指向不同的对象,改变其中一个对象不会影响另外一个对象。
// 对象数组的深拷贝
function deepClone(current) {
if (current === null) {
throw("请输入非空对象引用")
}
if (current instanceof Object) {
// 判断为对象还是数组
const target = ((current instanceof Array) ? [] : {})
// 遍历对象属性或者数组下标
for (let porperty in current) {
// 遍历对象自身属性而非原型身上的属性
if (current.hasOwnProperty(property)) {
// 判断是基本数据类型还是引用数据类型还是基本数据类型中的null
if (current[property] === null) {
target[property] = current[property]
} else if (typeof current[property]==="obj") {
target[property]=deepClone(current[property])
}else{
target[property] = current[property]
}
}
}
return target
} else {