js巩固- 拷贝

浅拷贝:只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存

  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
	}
}

猜你喜欢

转载自blog.csdn.net/m0_37285193/article/details/121743957