最近又要开始找工作了,重温了下 深浅拷贝,特此记录,加深印象!
一. 概念
浅拷贝:如果属性是基本类型,拷贝的就是基本类型的值;如果属性是引用类型,拷贝的就是内存地址
深拷贝:新增一个新的栈,两个对象的属性完全一样,但是对应两个不同的存储地址;修改一个对象的属性, 不会影响另一个对象的属性;
二. 手写深拷贝
function deepclone(obj={}) {
// 先判断是否为基本数据类型
if (typeof obj !== 'object' || obj == null) {
// 判断如果为null 或者 不为对象或数组
return obj;
}
// 返回结果
let result;
// 判断是数组还是对象
if (obj instanceof Array) {
result = []
} else {
result = {}
}
for (let key in obj) {
// 保证key 不是原型属性
if (obj.hasOwnProperty(key)) {
// 递归调用
result[key] = deepclone(obj[key])
}
}
return result;
}