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

  • excel不显示底部其他工作表(excel不显示底部其他工作表,显示的是录制宏)

    excel不显示底部其他工作表(excel不显示底部其他工作表,显示的是录制宏)

  • 移动二次认证怎么在微信打开(移动二次认证怎么弄)

    移动二次认证怎么在微信打开(移动二次认证怎么弄)

  • 华为手机如何用手机测网速多少兆(华为手机如何用nfc复制门禁卡)

    华为手机如何用手机测网速多少兆(华为手机如何用nfc复制门禁卡)

  • 华为30s怎么设置返回键(华为30s怎么设置视频美颜)

    华为30s怎么设置返回键(华为30s怎么设置视频美颜)

  • kindle电池容量(kindle电池容量为什么这么低)

    kindle电池容量(kindle电池容量为什么这么低)

  • bose是什么品牌音响(bose是啥品牌)

    bose是什么品牌音响(bose是啥品牌)

  • 腾讯会议断开音频会被发现吗(腾讯会议断开音频会开麦吗)

    腾讯会议断开音频会被发现吗(腾讯会议断开音频会开麦吗)

  • 更新驱动有什么作用(更新驱动有什么坏处)

    更新驱动有什么作用(更新驱动有什么坏处)

  • iphone11pro max录屏怎么设置(iphone11pro max录屏在哪里)

    iphone11pro max录屏怎么设置(iphone11pro max录屏在哪里)

  • iphone公开版和官方版有什么区别(苹果公开版有什么区别)

    iphone公开版和官方版有什么区别(苹果公开版有什么区别)

  • 企业qq可以发群消息吗(企业qq可以发群公告吗)

    企业qq可以发群消息吗(企业qq可以发群公告吗)

  • vivo手机怎么投屏到电视(vivo手机怎么投屏到苹果平板上)

    vivo手机怎么投屏到电视(vivo手机怎么投屏到苹果平板上)

  • ps把图片变成纯黑白(ps把图片变成纯黑白简画)

    ps把图片变成纯黑白(ps把图片变成纯黑白简画)

  • 微信在看是什么意思(微信在看是什么意思点赞)

    微信在看是什么意思(微信在看是什么意思点赞)

  • 腾讯能用手机号登录吗(腾讯用手机号怎么登录会员)

    腾讯能用手机号登录吗(腾讯用手机号怎么登录会员)

  • 华为mate30pro5g什么时候预售(华为mate30pro5g什么屏幕)

    华为mate30pro5g什么时候预售(华为mate30pro5g什么屏幕)

  • 企业级应用有什么危险(企业级应用有哪些)

    企业级应用有什么危险(企业级应用有哪些)

  • x27没有面部解锁吗(vivox27设置里没有面部解锁怎么设置)

    x27没有面部解锁吗(vivox27设置里没有面部解锁怎么设置)

  • 怎么删除重复数据(如何删除重复项计数)

    怎么删除重复数据(如何删除重复项计数)

  • 微信里的看一看是怎么回事(微信里的看一看是什么)

    微信里的看一看是怎么回事(微信里的看一看是什么)

  • 红米k20pro长宽比例(红米k20pro机身尺寸长宽高)

    红米k20pro长宽比例(红米k20pro机身尺寸长宽高)

  • 苹果qq怎么关闭手机通讯录(苹果qq怎么关闭可能认识的人)

    苹果qq怎么关闭手机通讯录(苹果qq怎么关闭可能认识的人)

  • 手机电源键失灵(手机电源键失灵怎么开机)

    手机电源键失灵(手机电源键失灵怎么开机)

  • 最贵的GameBoy是什么(最贵的游戏宣传片)

    最贵的GameBoy是什么(最贵的游戏宣传片)

  • phpcms怎么连接数据库(php如何连接html)

    phpcms怎么连接数据库(php如何连接html)

  • 库存商品余额在借方
  • 怎么查对方一个月去了什么地方
  • 建筑公司收到材料发票
  • 展板制作费属于什么服务
  • 新企业所得税法规定的企业所得税基本税率
  • 核定征收个体户个人经营所得税
  • 免单计入什么科目
  • 开给天猫的服务费分录如何做
  • 样品不收钱怎么做会计分录
  • 银行汇票的概念
  • 企业所得税怎么征收
  • 购货方申请红字信息表,销售方不开会怎么样
  • 土地使用税是由出租方还是承租方交
  • 税务登记号和统计号区别
  • 会计怎么避免坐牢
  • 一般纳税人必须要交几个人社保
  • 国债利息纳税调增还是减
  • 营改增后增值税税率的调整
  • 申报缴纳印花税,取得银行缴税凭证
  • 事业单位项目前景怎么样
  • 企业计提房产税的会计处理正确的是
  • 开办费摊销从什么时候开始
  • linux 隐藏权限
  • 公司代缴社保公司吃亏吗
  • win11任务管理器在哪里打开
  • 迷迭香的养殖方法
  • php随机ua
  • 小狐狸803050
  • centos7完整版安装
  • 圣托里尼岛具体位置
  • 资产负债表项目填列的依据是
  • chatcters
  • uniapp微信小程序广告
  • vue-bus
  • 借入长期借款的利息
  • 著作权费用
  • 收付实现制与权责发生制的例题
  • 上级拔入资金
  • python中map和filter有啥区别
  • 织梦内容页模板修改
  • mongodb cond
  • 公司不按股权比例分红是否合法
  • 非定额备用金的使用范围
  • sql server 2005 sp4
  • 员工工资应要计入什么
  • 计入存货成本的税费
  • 开个人劳务票需要本人去吗
  • 金蝶结转销售成本
  • 固定资产计提折旧凭证怎么做
  • 常见的防暑降温药有
  • 开红字发票如何调整收入?
  • 待抵扣进项税额分录
  • 机动车销售折让红字信息表
  • 怎样理解
  • 企业办理名称变更怎么办
  • 发票红冲后原票是什么状态
  • 公司补缴社保怎么查不到
  • 事业单位打款多久到账
  • sql server错误和使用情况报告
  • mysql id in
  • win7系统双击不能打开我的电脑
  • 右键菜单管理 win10
  • ubuntu怎么编辑文件
  • 一台电脑多个用户组怎么显示在一个屏幕上
  • windows8.1u盘安装教程
  • window10软件搜索
  • ie10变成ie8
  • win8如何安装软件
  • linux安装后没有网卡只有lo
  • 贝塞尔曲线pr怎么用
  • jquery validate
  • javascript声明变量的语句
  • python,字符串
  • linux怎么使用
  • android上吹一吹功能的实现代码
  • python中的整数
  • 四川国税发票查询验证
  • 没有单位怎么交职工养老保险
  • 企业可以享受哪些政策优惠
  • 2020北京国税局的待遇
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设