js巩固- 拷贝-CSDN博客

71 阅读1分钟
浅拷贝:只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存
  1. Object.assign()
let obj = {a:{},b:{}}
let obj1 = Object.assign({},obj)
obj1.c = 1
console.log(obj,obj1);
  1. 扩展运算符...
let obj = {a:{c:1},b:{}}
let obj1 ={...obj}
obj1.a.c = 2
console.log(obj,obj1);

在这里插入图片描述

深拷贝:新旧对象不共享内存,修改新对象不会改到旧对象。
  1. JSON.parse(JSON.stringify()) 缺点 a.循环引用报错 b.不能拷贝function等
  2. 第三方库lodash
  3. 手写递归
function deepClone(target, map = new Map()){
	if(typeof target === 'object' && target !== null){
		let cloneTarget = Array.isArray(target)?[]:{}
		if(map.has(target)){
			return map.get(target)
		}
		map.set(target, cloneTarget)
		for(let item in target){
			cloneTarget[item] = deepClone(target[item], map)
		}
		return cloneTarget
	}else{
		return target
	}
}