// 使用遍历赋值的方式拷贝
const deepClone = (target, map = new Map()) => {
// 基本数据类型
if (typeof target !== 'object') {
return target
}
// 引用数据类型特殊处理(递归处理)
// 判断数组还是对象
const temp = Array.isArray(target) ? [] : {}
if (map.get(target)) {
// map,允许将对象类型当成key进行存储
// 遇到已存在的值或对象时,直接返回该字段对应value,防止进入下方的循环导致死循环
return map.get(target)
}
// 当遇到 a.key = a时,可以将对象当成key,value为当前temp
map.set(target, temp)
for (let key in target) {
// 递归需要将当前对象key值 与 map对象传递进去
temp[key] = deepClone(target[key], map)
}
return temp
}
const a = {
name: 'sunshine_lin',
hobbies: { sports: '篮球', tv: '雍正王朝' },
works: ['2020', '2021']
}
a.key = a // 环引用(自己的key指向自己)
js手写深拷贝
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。