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

  • 华为nova5i键盘声音怎么关闭(华为手机键盘声音在哪里调)

    华为nova5i键盘声音怎么关闭(华为手机键盘声音在哪里调)

  • switch新机第一次充电(switch买回来第一次应该怎么用)

    switch新机第一次充电(switch买回来第一次应该怎么用)

  • qq为什么加不了好友(qq为什么加不了好友了qq也搜不到)

    qq为什么加不了好友(qq为什么加不了好友了qq也搜不到)

  • 小米手机来电彩铃怎么设置(小米手机来电彩铃哪里可以设置)

    小米手机来电彩铃怎么设置(小米手机来电彩铃哪里可以设置)

  • 小米手机怎么关闭无痕浏览模式(小米手机怎么关闭境外来电)

    小米手机怎么关闭无痕浏览模式(小米手机怎么关闭境外来电)

  • 电脑不显示图标怎么回事(电脑不显示图标并且点鼠标没有用)

    电脑不显示图标怎么回事(电脑不显示图标并且点鼠标没有用)

  • ttf是什么文件(ttf文件可以删除吗)

    ttf是什么文件(ttf文件可以删除吗)

  • 不属于计算机病毒特征的是(不属于计算机病毒特性的事什么)

    不属于计算机病毒特征的是(不属于计算机病毒特性的事什么)

  • 苹果xr左上角时间显示蓝色

    苹果xr左上角时间显示蓝色

  • etc可以异地激活吗(etc可以在外地激活吗)

    etc可以异地激活吗(etc可以在外地激活吗)

  • 华为手机微信变黑色背景怎么调(华为手机微信变小屏了怎么调节)

    华为手机微信变黑色背景怎么调(华为手机微信变小屏了怎么调节)

  • 电脑没电关机了文档没保存怎么办(电脑没电关机了要充多久才能开机)

    电脑没电关机了文档没保存怎么办(电脑没电关机了要充多久才能开机)

  • oppor9m怎么恢复出厂设置在哪里(oppor9m怎么恢复出厂设置)

    oppor9m怎么恢复出厂设置在哪里(oppor9m怎么恢复出厂设置)

  • 数据压缩的目的是什么(数据压缩的目的是尽可能消除数据中的冗余)

    数据压缩的目的是什么(数据压缩的目的是尽可能消除数据中的冗余)

  • 硬盘与内存的区别(硬盘与内存的区别与联系)

    硬盘与内存的区别(硬盘与内存的区别与联系)

  • 小米mix4什么时候发布(小米MIX4什么时候下架)

    小米mix4什么时候发布(小米MIX4什么时候下架)

  • 为什么airpods充不上电(为什么AirPods充电盒有电但不给耳机充电)

    为什么airpods充不上电(为什么AirPods充电盒有电但不给耳机充电)

  • 数据的存储结构是指什么(数据的存储结构包括数据元素的表示和)

    数据的存储结构是指什么(数据的存储结构包括数据元素的表示和)

  • 苹果8plus3d touch怎么用(苹果8plus3d touch没有震动感 怎么解决)

    苹果8plus3d touch怎么用(苹果8plus3d touch没有震动感 怎么解决)

  • 苹果x无面容可以修吗(苹果x无面容可以改成有面容吗)

    苹果x无面容可以修吗(苹果x无面容可以改成有面容吗)

  • 台式电脑键盘错乱(台式电脑键盘灯不亮)

    台式电脑键盘错乱(台式电脑键盘灯不亮)

  • 苹果储存空间满了怎么办(苹果储存空间满了怎么清除)

    苹果储存空间满了怎么办(苹果储存空间满了怎么清除)

  • node.js详细安装教程(node js 安装)

    node.js详细安装教程(node js 安装)

  • 运输发票税率6%和3%区别在哪
  • 可供出售金融资产和长期股权投资
  • 作废的发票要拿出来吗
  • 企业年报股东及出资信息要怎么填写
  • 子公司内部交易抵消举例说明
  • 款项已付发票未到,怎么做凭证
  • 计提所得税是在结转损益之前还是之后
  • 快递售后是干嘛的
  • 土地增值税清算比例的计算
  • 契税法律依据
  • 公司房产出租租金如何开票?
  • 已认证的发票没领怎么办
  • 个人怎么开增值税
  • 发票开什么明目列福利费
  • 小规模纳税人租金收入增值税税率
  • 2月发1月工资个税怎么算
  • 外方获得的利润怎么算
  • 小规模补缴增值税怎么算
  • 小规模计提缴纳增值税
  • 折扣返利怎么做会计分录
  • 苹果手机升级微信版本
  • 电脑虚拟内存不够
  • php远程调用
  • 固定资产折旧计算方法
  • php解密在线
  • 苹果系统公测版
  • PHP:eregi_replace()的用法_Regex正则函数
  • 路由器登录密码忘了怎么设置
  • PHP:pg_escape_bytea()的用法_PostgreSQL函数
  • vrvarp.exe是什么
  • 应收账款的主要功能包括哪些
  • php获取url内容
  • php流程图
  • 倾向得分匹配后怎么进行回归
  • 织梦cms怎么样
  • 勘察设计费是否含税
  • 本年利润的会计分录有哪些
  • 如何开具电子发票广东
  • 白酒贴牌酒是真酒还是假酒
  • 织梦开发教程
  • 固定资产清理怎么做账务处理
  • 会计凭证大小写不一致
  • 建筑工程分包案例
  • 结转本月应交增值税
  • 弥补以前年度亏损怎么算
  • 公对私转账交税
  • 固定资产卡片账是明细账吗
  • 税控服务费全额抵扣
  • 工程未完工开了发票怎么做账
  • 进项税额转出有什么好处
  • 免抵退账务处理流程
  • 写字楼物业费按照什么面积
  • 为什么贷款要收手续费
  • 支付的劳务派遣服务费计入什么科目
  • 不属于投资性房地产项目有自用房地产作为存货的
  • 存出保证金的账务处理
  • 出纳日记账的日期以什么为准
  • mysql视图语句
  • windows xp退役
  • win8系统怎么设置自动关机
  • 更换主板也不用换硅脂吗
  • win7自带桌面时钟吗
  • windows10 不能启动
  • win10系统打开文件夹就不停的闪
  • 新闻客户端有哪些?
  • linux安装xen
  • 批处理for命令详解
  • 在机上创建一个文件夹
  • perl tr函数
  • bootstrap基础教程
  • jquery实现移动端
  • 狗刨好学吗
  • js面向接口编程
  • 税务稽查条例操作规程
  • 企业个税网上申报时间
  • 利润报表怎么填写
  • 2020年增值税运费税率是多少
  • 电子税务局怎么添加开票员
  • 86年的2020年是多少岁
  • 浙江农村医保手机上怎么缴费
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设