位置: IT常识 - 正文

VUE浅拷贝和深拷贝(js浅拷贝和深拷贝的方法)

编辑:rootadmin
VUE浅拷贝和深拷贝 文章目录前言一、数据类型1.1.基本数据类型1.2.引用数据类型1.3.区别二、浅拷贝2.1.定义2.2.浅拷贝特点三、深拷贝3.1.定义3.2.深拷贝特点四、拷贝实现方案4.1.Object.assign()4.2.concat()4.3.slice()4.4.JSON.parse(JSON.stringify())4.5.cloneDeep()五、结论前言

推荐整理分享VUE浅拷贝和深拷贝(js浅拷贝和深拷贝的方法),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue深拷贝浅拷贝,vue深拷贝和浅拷贝的区别,vue深拷贝和浅拷贝的区别,vue 深浅拷贝,javascript浅拷贝和深拷贝,javascript浅拷贝和深拷贝,vue 深浅拷贝,vue 深浅拷贝,内容如对您有帮助,希望把文章链接给更多的朋友!

在理解浅拷贝和深拷贝浅前,必须先理解基本数据类型和引用数据类型的区别。

一、数据类型1.1.基本数据类型

字符串(Sring)、布尔值(Boolean)和数字(Number)

1.2.引用数据类型

数组(Array)和对象(Object)

1.3.区别

  基本数据类型是存储在栈内存中。而引用类型存放的值是指向数据的引用,而不是数据本身,真实数据是存放在堆内存里,具体见如下:

二、浅拷贝2.1.定义

  浅拷贝是按位拷贝对象,它会创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型,拷贝的就是基本类型的值;如果属性是内存地址(引用类型),拷贝的就是内存地址 ,因此如果其中一个对象改变了这个地址,就会影响到另一个对象。即默认拷贝构造函数只是对对象进行浅拷贝复制(逐个成员依次拷贝),即只复制对象空间而不复制资源。

2.2.浅拷贝特点

  对于基本数据类型的成员对象,因为基础数据类型是值传递的,所以是直接将属性值赋值给新的对象。基础类型的拷贝,其中一个对象修改该值,不会影响另外一个。

var a = 10var b = ab = 20console.log("a",a) //10console.log("b",b) //20

  对于引用类型,比如数组或者类对象,因为引用类型是引用传递,所以浅拷贝只是把内存地址赋值给了成员变量,它们指向了同一内存空间。改变其中一个,会对另外一个也产生影响

var obj = { a:"AAA"}var obj2 = objobj2.a = "BBB"console.log("obj",obj) //{name: "BBB"}console.log("obj2",obj2) //{name: "BBB"}VUE浅拷贝和深拷贝(js浅拷贝和深拷贝的方法)

三、深拷贝3.1.定义

  深拷贝,在拷贝引用类型成员变量时,为引用类型的数据成员另辟了一个独立的内存空间,实现真正内容上的拷贝。

3.2.深拷贝特点

  对于基本数据类型的成员对象,因为基础数据类型是值传递的,所以是直接将属性值赋值给新的对象。基础类型的拷贝,其中一个对象修改该值,不会影响另外一个(和浅拷贝一样)。   对于引用类型,比如数组或者类对象,深拷贝会新建一个对象空间,然后拷贝里面的内容,所以它们指向了不同的内存空间。改变其中一个,不会对另外一个也产生影响。

var obj = { a:"AAA"}var obj2 = {} // 创建新的对象obj2 = objobj2.a = "BBB"console.log("obj",obj) //{name: "AAA"}console.log("obj2",obj2) //{name: "BBB"}

四、拷贝实现方案4.1.Object.assign()

  单级结构时深拷贝,多级结构浅拷贝,Object.assign()对象是用于将所有可枚举属性的值从一个或多个源对象复制到目标对象,将返回目标对象。 a)单级结构(一级拷贝是深拷贝):

var obj = { a: 10,}var obj2 = Object.assign({}, obj);obj2.a = 20console.log("obj",obj); //{a: 10}console.log("obj2",obj2) //{a: 20}

b)多级结构(一级拷贝是浅拷贝,修改二级对象还是会影响原对象):

var obj = { a: 10, b: { c:"AAA", d:666 }}var obj2 = Object.assign({}, obj);obj2.b.c = "BBB"console.log("obj",obj); //{a: 10,b: {c:"BBB",d:666}}console.log("obj2",obj2); //{a: 10,b: {c:"BBB",d:666}}4.2.concat()

单级结构时深拷贝,多级结构浅拷贝 a)单级结构(一级拷贝是深拷贝):

let arr = [1, 2];let arr2 = arr.concat();arr2[1] = 3;console.log("arr",arr) //[1, 2]console.log("arr2",arr2) //[1, 3]

b)多级结构(一级拷贝是浅拷贝):

let arr = [1, 2, { a: 'AAA'}];let arr2 = arr.concat();arr2[2].a = 'BBB';console.log("arr",arr) //[1, 2, {a: 'BBB'}]console.log("arr2",arr2) //[1, 2, {a: 'BBB'}]4.3.slice()

单级结构时深拷贝,多级结构浅拷贝 a)单级结构(一级拷贝是深拷贝):

let arr = [1, 2, 3];let arr2 = arr.slice();arr2[1] = 4;console.log("arr",arr) //[1, 2, 3]console.log("arr2",arr2) //[1, 4, 3]

b)多级结构(一级拷贝是浅拷贝):

let arr = [1, 2, {a:'AAA'}];let arr2 = arr.slice();arr2[2].a = 'BBB';console.log("arr",arr) //[1, 2, {a: 'BBB'}]console.log("arr2",arr2) //[1, 2, {a: 'BBB'}]4.4.JSON.parse(JSON.stringify())

  用JSON.stringify将对象转成JSON字符串,再用JSON.parse()把字符串解析成对象,一去一来,新的对象产生了,而且对象会开辟新的栈,实现深拷贝。   单级多级均为深拷贝,但需要注意无法拷贝RegExp对象、function和symbol

let arr = [1, 2, {a:'AAA'}];let arr2 = JSON.parse(JSON.stringify(arr))arr2[2].a = 'BBB';console.log("arr",arr) //[1, 2, {a: 'AAA'}]console.log("arr2",arr2) //[1, 2, {a: 'BBB'}]4.5.cloneDeep()

单级多级均为深拷贝,使用lodash工具中cloneDeep方法实现深拷贝,需要通过npm引入lodash库 npm i -save lodash //全局安装

<script> import _ from 'lodash'; export default { name: 'Test', mounted() { const arr = [1, 2, { a: 'AAA' }]; const arr2 = _.cloneDeep(arr); arr2[2].a = 'BBB'; console.log('arr', arr); // [1, 2, {a: 'AAA'}] console.log('arr2', arr2); // [1, 2, {a: 'BBB'}] }, };</script>五、结论类型第一级为基础数据类型原数据中包含子对象浅拷贝改变不会使原始数据改变改变会使原始数据改变深拷贝改变不会使原始数据改变改变不会使原始数据改变

如有疑问或不足之处,欢迎交流指正,谢谢!!!

本文链接地址:https://www.jiuchutong.com/zhishi/299130.html 转载请保留说明!

上一篇:模型部署入门教程(三):PyTorch 转 ONNX 详解(模型怎么部署)

下一篇:【手撕源码】vue2.x双向数据绑定原理(手撕代码题目集锦)

  • 苹果12息屏时间怎么设置(苹果12息屏时间显示)

    苹果12息屏时间怎么设置(苹果12息屏时间显示)

  • 搜狗输入法乘号怎么输入(添加搜狗输入法)

    搜狗输入法乘号怎么输入(添加搜狗输入法)

  • 钉钉一定要实名认证吗(钉钉一定要实名吗)

    钉钉一定要实名认证吗(钉钉一定要实名吗)

  • 闲鱼消费者保障服务怎么开(闲鱼消费者保障怎么开通)

    闲鱼消费者保障服务怎么开(闲鱼消费者保障怎么开通)

  • 京东怎么定位别的城市(京东怎样定位到别的地方)

    京东怎么定位别的城市(京东怎样定位到别的地方)

  • 苹果手机怎么调出home悬浮键(苹果手机怎么调字体大小)

    苹果手机怎么调出home悬浮键(苹果手机怎么调字体大小)

  • 抖音购物退款多久到账(抖音购物退款多少天到账)

    抖音购物退款多久到账(抖音购物退款多少天到账)

  • nova3i指纹解锁找不到了(nova3指纹锁没有了)

    nova3i指纹解锁找不到了(nova3指纹锁没有了)

  • iPhone11没有自动调节亮度(苹果11怎么没有自动更新)

    iPhone11没有自动调节亮度(苹果11怎么没有自动更新)

  • 超威1号和超威电池有什么区别(超威1号和超威a8哪个跑的远)

    超威1号和超威电池有什么区别(超威1号和超威a8哪个跑的远)

  • 笔记本投影到投影仪不能全屏(笔记本投影到投影仪上之后有两个屏怎么调)

    笔记本投影到投影仪不能全屏(笔记本投影到投影仪上之后有两个屏怎么调)

  • ios11有深色模式吗(ios11可以设置深色模式)

    ios11有深色模式吗(ios11可以设置深色模式)

  • 三星s20有呼吸灯吗(三星s20呼吸灯会一直闪烁吗)

    三星s20有呼吸灯吗(三星s20呼吸灯会一直闪烁吗)

  • windows是应用软件吗(WINDOWS是应用软件吗)

    windows是应用软件吗(WINDOWS是应用软件吗)

  • 拍照打印算复印件吗(拍照打印算复印嘛)

    拍照打印算复印件吗(拍照打印算复印嘛)

  • vivo手环怎么连接手机(vivo手环怎么连接vivo手机)

    vivo手环怎么连接手机(vivo手环怎么连接vivo手机)

  • 乐视x620怎么解锁(乐视x620怎么解bl锁)

    乐视x620怎么解锁(乐视x620怎么解bl锁)

  • 恢复删除的微信好友(恢复删除的微信好友的聊天记录)

    恢复删除的微信好友(恢复删除的微信好友的聊天记录)

  • 流量限速后能玩微信吗(流量限速后能玩游戏吗)

    流量限速后能玩微信吗(流量限速后能玩游戏吗)

  • 拍抖音怎么添加音乐(拍抖音怎么添加歌词)

    拍抖音怎么添加音乐(拍抖音怎么添加歌词)

  • 该公众号提供的服务出现故障(该公众号提供的服务出现故障,请稍后再试怎么回事)

    该公众号提供的服务出现故障(该公众号提供的服务出现故障,请稍后再试怎么回事)

  • 爱奇艺如何取消自动续费(爱奇艺如何取消包月)

    爱奇艺如何取消自动续费(爱奇艺如何取消包月)

  • 把桌面文件放到d盘并且同步教程(把桌面文件放到虚拟机)

    把桌面文件放到d盘并且同步教程(把桌面文件放到虚拟机)

  • cnpm安装步骤(cnpm安装成功为什么用不了)

    cnpm安装步骤(cnpm安装成功为什么用不了)

  • chfn命令  系统管理(命令行系统)

    chfn命令 系统管理(命令行系统)

  • 抗税的性质
  • 转出多交增值税和转出未交增值税怎么理解
  • 代开发票含税价怎么核算为不含税发票
  • 资产负债表的货币资金根据什么填
  • 兼职工资如何发放给个人
  • 残次品销售账务处理
  • 哪些商业保险可以扣除个人所得税
  • 个税返还需要缴纳所得税吗
  • 转出进项税
  • 外贸企业一般纳税人申报
  • 名义股东转让股份侵权
  • 对方公司退回货款,但发票已经开了怎么写摘要
  • 定额材料损耗率国家标准
  • 房地产公司开水电费发票
  • 退回剩余工程物资计入什么科目
  • 定率征收多缴的企业所得税怎么计算?
  • 营业外收入个税手续费返还
  • 母子公司之间转让土地使用权
  • 机动车发票如何抵扣进项税
  • 税款滞纳金怎么入账
  • 代开专票地税没交怎么办?
  • 特殊建造行业
  • 如何填制记账凭证总结
  • 税金及附加是否设二级科目
  • 做买卖交税
  • 如何准确区分不动产租赁和仓储服务?
  • 错账查找的方法
  • 总公司以固定资产出资入股,固定资产是不是新公司的
  • win7怎么获取管理员
  • php框架基础教程
  • 如何查看自己的qq密码
  • 利息股息红利个人所得税税率
  • php curl_multi_init
  • 固定资产后续支出资本化和费用化
  • 适用执行企业会计准则的一般企业
  • php和ajax用哪个调用数据
  • 赡养老人专项附加扣除标准2023年
  • vue实现下载文件夹
  • php8.0 特性
  • php时间戳转换成时间
  • 美国人用什么英语词典
  • 购买土地支付的契税怎么入账
  • 关于差额征税的账务处理
  • 进销存表格模板明细账
  • 进项税额认证后可以撤销吗
  • 国家税务局监制的票还能用吗
  • 账上没有实收资本
  • 二房东开票需要哪些资料
  • 货币资金的计税基础
  • 可供出售金融资产名词解释
  • 交付使用资产是否含税
  • 应付账款与实际付款有差异如何分录
  • 补缴上年度所得税的会计分录
  • 销售出库单需要盖章吗
  • 产品销售成本计算表
  • sqlserver 查询锁
  • windows更新kb5001391
  • ubuntu x
  • 如何调整bios
  • win10光驱无法识别
  • win7更新不了80072efe
  • winxp怎么自动开机
  • win7英语
  • gh-files是什么
  • linux卡屏
  • 低分辨率调高分辨率会模糊吗
  • win10怎么用cmd删除文件
  • linux运维是必死之路
  • 不用js多浏览器能用吗
  • android蓝牙连接过程
  • SendTo增强版 批处理实用小工具
  • 开发流程和步骤
  • linux读出文件
  • 修改文件名ren
  • android activity finish
  • javascript程序设计教程
  • 中国税务精神内容英文
  • 2022年安徽城镇非私营单位平均工资
  • 沈阳税务机关地区编号
  • 蜂窝煤利润怎么样
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设