深拷贝和浅拷贝的区别

【深拷贝和浅拷贝的区别】

深复制和浅复制最根本的区别在于是否是真正获取了一个对象的复制实体,而不是引用。
(深拷贝和浅拷贝是只针对Object和Array这样的引用数据类型的)

一、浅拷贝

——是拷贝基本类型的数据,而引用类型数据,复制后也会发生引用,我们把这种拷贝叫做“浅拷贝”。
浅复制仅仅是指向被复制的内存地址,如果原地址中对象被改变了,那么浅复制出来的对象也会相应改变。

  • 复制基本类型的属性;
  • 引用类型的属性复制,复制栈中的变量和变量指向堆内存中的对象的指针,不复制堆内

在这里插入图片描述

let a=[0,1,2,3,4],
    b=a;
console.log(a===b);   //true
a[0]=1;
console.log(a,b);  11234

二、浅拷贝

——在计算机中开辟了一块新的内存地址用于存放复制的对象。
浅拷贝出来的数据并不独立,如果被复制的对象改变了,那么浅拷贝的对象也会改变,深拷贝之后就会完全独立,与浅拷贝断绝关系。

  • 复制基本类型的属性;
  • 引用类型的属性复制,复制栈中的变量和变量指向堆内存中的对象的指针和堆内存中的对象。

在这里插入图片描述
深拷贝的实现方式:
1.JSON.parse(JSON.stringify())
在这里插入图片描述
原理: 用JSON.stringify将对象转成JSON字符串,再用JSON.parse()把字符串解析成对象,一去一来,新的对象产生了,而且对象会开辟新的栈,实现深拷贝。
这种方法虽然可以实现数组或对象深拷贝,但不能处理函数。
2.手写递归方法
递归方法实现深度克隆原理:遍历对象、数组直到里边都是基本数据类型,然后再去复制,就是深度拷贝。

在这里插入图片描述
2.函数库lodash
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值