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

  • 空调显示h5是什么意思外机不转(空调显示h5是什么意思)(空调显示H5是什么情况)

    空调显示h5是什么意思外机不转(空调显示h5是什么意思)(空调显示H5是什么情况)

  • iqooz1屏幕多大尺寸(iqooz1屏幕最高多少nit)

    iqooz1屏幕多大尺寸(iqooz1屏幕最高多少nit)

  • 为什么苹果xr的热点电脑用不了(为什么苹果xr的人像模式不能拍物体)

    为什么苹果xr的热点电脑用不了(为什么苹果xr的人像模式不能拍物体)

  • 华为p40怎么查激活时间(华为p40怎么查激活时间和日期)

    华为p40怎么查激活时间(华为p40怎么查激活时间和日期)

  • 怎样清理微信(怎样清理微信聊天记录不能恢复)

    怎样清理微信(怎样清理微信聊天记录不能恢复)

  • 手机右上角出现禁止信息标志(手机右上角出现一个标志不知是什么?)

    手机右上角出现禁止信息标志(手机右上角出现一个标志不知是什么?)

  • 开机显示正在准备自动修复怎么办(开机显示正在准备修复)

    开机显示正在准备自动修复怎么办(开机显示正在准备修复)

  • 拼多多的618是什么意思(拼多多618商品是正品吗)

    拼多多的618是什么意思(拼多多618商品是正品吗)

  • 手机充不进电怎么解决(手机充不进电怎么办小米)

    手机充不进电怎么解决(手机充不进电怎么办小米)

  • qq空间上传视频有限制吗(qq空间上传视频会被监控吗?)

    qq空间上传视频有限制吗(qq空间上传视频会被监控吗?)

  • 华为手机怎么删除热点资讯(华为手机怎么删除下载的软件)

    华为手机怎么删除热点资讯(华为手机怎么删除下载的软件)

  • 手机插卡无服务怎么回事(很久没用的手机插卡无服务)

    手机插卡无服务怎么回事(很久没用的手机插卡无服务)

  • 米聊怎么随机加好友(米聊怎么添加好友)

    米聊怎么随机加好友(米聊怎么添加好友)

  • 华为mate20pro耳机设置(mate20pro耳机孔在哪)

    华为mate20pro耳机设置(mate20pro耳机孔在哪)

  • 苹果11pro max和11pro区别(苹果11pro max和11pro的区别)

    苹果11pro max和11pro区别(苹果11pro max和11pro的区别)

  • 腾讯手机管家如何拦截陌生人短信(腾讯手机管家如何注销)

    腾讯手机管家如何拦截陌生人短信(腾讯手机管家如何注销)

  • 拼多多复活卡在哪里找(拼多多复活卡可以复活砍价免费拿吗)

    拼多多复活卡在哪里找(拼多多复活卡可以复活砍价免费拿吗)

  • 键盘漏电怎么办(电脑键盘漏电怎么处理)

    键盘漏电怎么办(电脑键盘漏电怎么处理)

  • cad鼠标不见了(cad鼠标不见了 黑屏怎么办)

    cad鼠标不见了(cad鼠标不见了 黑屏怎么办)

  • 电脑开机画面都告诉了你哪些信息?(电脑开机画面都是英文怎么处理)

    电脑开机画面都告诉了你哪些信息?(电脑开机画面都是英文怎么处理)

  • 加拿大西北部的一头美洲野牛 (© Don Johnston/agefotostock)(加拿大西北部的首都)

    加拿大西北部的一头美洲野牛 (© Don Johnston/agefotostock)(加拿大西北部的首都)

  • 房产企业季度预测
  • 投资者减除费用和工资薪金减除费用
  • 法人分配利润分录
  • 本年利润,利润分配
  • 库存商品结转成本的金额怎么计算
  • 应付债券利息调整科目理解
  • 交通违章罚款有优惠吗
  • 会计增长知识方面
  • 增值税发票作废有什么损失
  • 房地产企业所得税预缴
  • 学校应该缴纳的税
  • 以公允价值模式后续计量的投资性房地产无须计提减值
  • 所得税季报收入是全年吗
  • 补缴地价款是什么意思
  • 1697509479
  • 受托方委托加工费会计分录
  • 什么是短期借款利率
  • win11笔记本如何让电池充电到100%
  • macbookpro怎么打开活动监视器
  • 钉钉h5微应用
  • 电力系统常用的接线有哪几种
  • 包装物交不交消费税
  • 软件开发企业进项税额抵扣
  • 武陵山脉海拔
  • laravel实战教程
  • php开源微商城
  • html下划线怎么设置
  • 新准则土地使用权计入固定资产还是无形资产
  • vue的ref怎么用
  • 残差网络中的残差指的是什么
  • php实用教程
  • df -th命令
  • python集合的并集符号语言
  • 金蝶软件账套备份在哪里
  • python中如何创建一个对象
  • 代收代缴水费可以加多少损耗
  • phpcms安装
  • mysqldump导入数据库
  • mysql常用优化方案
  • 属于流动资产的项目有
  • 旅游大巴应怎么买票
  • 其他综合收益转入盈余公积和未分配利润
  • 小规模纳税人适用什么会计准则
  • 哪些固定资产是负债类
  • 累计折旧贷方余额怎么算
  • 棚户区改造国家给政府拨款吗
  • 捆绑销售如何做会计处理合适?
  • 代理进口货物如何确定增值税纳税人
  • 支付给个人的佣金没有发票
  • 政府发放慰问金
  • 应付账款二级科目可以是个人吗
  • 保险工资单怎么开
  • 返聘的退休人员需不需要缴纳社保
  • 销售收入确认后怎么处理
  • 2021年财务报表申报
  • 固定资金管理内容包括哪些
  • 转账时转错账号怎么办
  • 个人向公司账户存现金
  • 盈余公积和未分配利润合起来构成
  • 权益性投资包括哪些
  • centos6安装yum源
  • open bsd
  • ubuntu下source、sh、bash、./执行脚本的区别详细介绍
  • linux删除u盘记录
  • youphone.exe是什么
  • 获取windows的最新信息
  • linux在实际工作中的应用
  • win10 20h2怎么更新
  • nodejs 获取文件名
  • 开手游游戏
  • 微信小程序吸血鬼 豹女
  • js数据的基本类型有哪些
  • jquery .find()
  • nodemcu连接阿里云
  • js类继承的例子
  • 出租车发票真伪怎么查询
  • 河北云办税厅2.0登录
  • 债的抵偿顺序
  • 武汉洪山实验中学是初中还是高中
  • 众筹在中国的发展潜力
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设