位置: 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双向数据绑定原理(手撕代码题目集锦)

  • 微信指纹支付自动关闭的原因(微信指纹支付自动变密码支付)

    微信指纹支付自动关闭的原因(微信指纹支付自动变密码支付)

  • 抖音发的视频播放量为0(抖音发的视频播放量不过百)

    抖音发的视频播放量为0(抖音发的视频播放量不过百)

  • 小度在家监控怎样回放(小度在家的监控)

    小度在家监控怎样回放(小度在家的监控)

  • 做系统按f几进入u盘(做系统开机按f几)

    做系统按f几进入u盘(做系统开机按f几)

  • 电脑系统坏了(电脑系统坏了怎么修复win10)

    电脑系统坏了(电脑系统坏了怎么修复win10)

  • 华为mate30黑屏是怎么回事(华为mate30出现黑屏)

    华为mate30黑屏是怎么回事(华为mate30出现黑屏)

  • wps要付费吗(wps要收费吗)

    wps要付费吗(wps要收费吗)

  • 微商行业作为近年来的新兴产业,因其准入门槛低、利润高,吸引了(了解微商行业)

    微商行业作为近年来的新兴产业,因其准入门槛低、利润高,吸引了(了解微商行业)

  • ipad忘记密码打不开了怎么办(iPad忘记密码打不开昨办)

    ipad忘记密码打不开了怎么办(iPad忘记密码打不开昨办)

  • 网易云音乐是什么时候有的(网易云音乐是什么时候上线的)

    网易云音乐是什么时候有的(网易云音乐是什么时候上线的)

  • 开启永恒模式什么意思(开启永恒模式性能会增强吗)

    开启永恒模式什么意思(开启永恒模式性能会增强吗)

  • vivo深色模式有什么用(vivo手机的深色模式可以省电吗)

    vivo深色模式有什么用(vivo手机的深色模式可以省电吗)

  • 荣耀20和20pro屏幕尺寸(荣耀20和20pro屏幕通用吗)

    荣耀20和20pro屏幕尺寸(荣耀20和20pro屏幕通用吗)

  • 用什么软件可以更换图片背景(用什么软件可以提取图片文字)

    用什么软件可以更换图片背景(用什么软件可以提取图片文字)

  • u盘无法格式化是坏了吗(u盘无法格式化为NTFS)

    u盘无法格式化是坏了吗(u盘无法格式化为NTFS)

  • 苹果手机外放音量小怎么办(苹果手机外放音质)

    苹果手机外放音量小怎么办(苹果手机外放音质)

  • 手机怎么设置开机自动启动软件(手机怎么设置开机自启动)

    手机怎么设置开机自动启动软件(手机怎么设置开机自启动)

  • 如何退出抖音喜欢作品(咋样取消抖音喜欢)

    如何退出抖音喜欢作品(咋样取消抖音喜欢)

  • 苹果ios13怎么把某个app隐藏(苹果13怎么把图标放到下面)

    苹果ios13怎么把某个app隐藏(苹果13怎么把图标放到下面)

  • pr为什么视频会变绿(为什么pr里的视频突然那么卡)

    pr为什么视频会变绿(为什么pr里的视频突然那么卡)

  • 苹果iphonexr防水等级(亲测iphone xr防水功能)

    苹果iphonexr防水等级(亲测iphone xr防水功能)

  • 滴滴可以中途改地址吗(滴滴可以中途改地址几次)

    滴滴可以中途改地址吗(滴滴可以中途改地址几次)

  • sentstrt.exe - sentstrt进程是什么文件  有什么用

    sentstrt.exe - sentstrt进程是什么文件 有什么用

  • 实现dedeCMS织梦系统评论实现多个表情的教程(织梦怎么用)

    实现dedeCMS织梦系统评论实现多个表情的教程(织梦怎么用)

  • 一般纳税人预缴税款几个点
  • 手机上可以开个人劳务发票吗
  • 离职补偿金怎么做账
  • 软件开发增值税免税吗
  • 已经认证的发票对方可以作废吗
  • 利润表中的管理费用和研发费用怎么填
  • 跨年的费用怎么调整
  • 买断式贴现是什么业务
  • 政府基金如何开票
  • 承兑汇票丢了如何追回
  • 交通违章罚款可以在手机上交吗
  • 按利润总额的25%计算应交所得税
  • 去年暂估的成本,汇算前收到的少,红冲全部暂估吗
  • 车船税不开票吗?
  • 乙公司为支付甲公司货款向其签发
  • 非公司员工缴纳社保有什么影响
  • 以前年度利润和当年净利润
  • 百旺发票修复怎么弄
  • 个人缴付的年金是什么
  • 是否所有电池产品都需在进口环节缴纳消费税?
  • 其他应付款调整到其他应收款
  • windows10如何切屏
  • 增值税发票税率怎么算
  • 鸿蒙大文件夹怎么设置透明度
  • 成本法 合并
  • 政府补贴专项资金使用要求
  • 如何安装电脑系统win7电路连接
  • avcodec是什么意思
  • PHP:xml_parser_free()的用法_XML解析器函数
  • 在禁用uac时无法激活什么原因
  • Win10 KB5004945 更新后多个品牌打印机无法使用的解决方法
  • 建筑工程给排水的内容
  • 固定资产未提完折旧停止经营怎么处理
  • 一般纳税人企业注销流程
  • 软件入无形资产还是长期待摊费用了
  • 特许权使用费属于无形资产吗
  • 企业信用贷款还款方式
  • php类的作用
  • 增值税专用发票丢了怎么补救
  • 2023值得推荐的手机
  • ChatGPT会让6个低端岗位失业
  • css水平居中和垂直居中怎么设置
  • 国税网如何下载申报后的财务报表
  • 可供出售金融资产和交易性金融资产
  • 费用化支出期末一般转入哪个账户?
  • 免交增值税应该计入什么科目
  • 必要报酬率和期望报酬率谁大更好
  • 税法的个人所得税
  • 摊余成本有什么用
  • 什么是金融资产和金融负债
  • 进账税发票未认账怎么办
  • 成本法长期股权投资初始成本确认
  • 股东如何收回投资款
  • 个体户做账流程新手必看
  • 税控盘开具发票怎么冲红?
  • 事业单位小规模纳税人咨询服务的税率
  • 会计计算工资的步骤流程
  • 会计建账的内容
  • xp系统如何开启共享文件夹
  • 数据中心为什么要建在山洞里
  • centos配置httpd
  • win7桌面整理软件
  • win8笔记本无线连接没有了,怎么设置
  • 域名解析a记录怎么填
  • win7显示ipv6无网络访问权限
  • 239mbps是多少兆网速
  • 脚本语言教程
  • 巧用dos命令合并图层
  • 如何删除命令
  • python如何查看
  • javascript入门教学
  • jquery返回顶部代码
  • jquery 3.5
  • 付了120救护车费怎么报销
  • 请问一般纳税人的业务协调税率是多少
  • 四个落实是哪四个落实
  • 电子税务局开的发票怎么作废
  • 非房地产企业土地增值税清算
  • 进项税计提和上交会计分录
  • 出口货物免抵税额怎么申报附加税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设