位置: IT常识 - 正文

前端面试:浅拷贝和深拷贝的区别?(前端常见面试)

编辑:rootadmin
前端面试:浅拷贝和深拷贝的区别?

推荐整理分享前端面试:浅拷贝和深拷贝的区别?(前端常见面试),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:前端面试题简书,前端面试底层原理,前端底层面试题,前端深度面试题,简单的前端面试题,前端深度面试题,前端底层面试题,简单的前端面试题,内容如对您有帮助,希望把文章链接给更多的朋友!

 前些天发现了一个巨牛的人工智能学习博客,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转

那么大家晚上好,我是今天晚上的主讲老师,我是兔哥。

我们在面试中经常会被问到浅拷贝和深拷贝的区别,正好群里也有在问到这个问题,于是今天就专门写一篇博客来讲解一下哈。

1.浅拷贝

浅拷贝是指,对基本类型的值拷贝,以及对象类型的地址拷贝。

怎么讲,什么是基本类型?

在js中,我们知道的基本类型有字符串,数字,布尔值。

当我们写这样的代码,就是浅拷贝。

var a = 1;var b = a; //浅拷贝b = 2; //改变b的值,并不会影响到a,因为浅拷贝对基本类型而言就是值拷贝console.log(a);

a还是1,和b没有关系。

前端面试:浅拷贝和深拷贝的区别?(前端常见面试)

这个道理,在对象中也一样适用。JavaScript中还有对象类型(也叫引用数据类型),对象类型的浅拷贝则只是拷贝了地址。

var p1 = { name: 'jack'}var p2 = p1;p2.name = 'rose';console.log(p1);

p2保存的是和p1一模一样的内存地址,就好像你去配了一把钥匙给张三,张三拿着钥匙一样可以去你家把冰箱里的酸奶喝了。

2.深拷贝

深拷贝是指,除了拷贝基本类型的值,还完全复刻了对象类型。

一个对象在内存中是固定存在的,我们如果要对其进行深拷贝,唯一的办法就是创建一个新的对象,里面的值完全复刻原来的对象。

还是刚才例子,我们稍加改造

var p1 = { name: 'jack'}var p2 = { name: p1.name};p2.name = 'rose';

这样一来,我们对p2进行改造,就不会影响到p1了。这就是深拷贝。

我们用这种方法实现深拷贝是可以的,但是如果属性太多,就会很繁琐。下面讲讲如何实现深拷贝的通用方法?

3.深拷贝 Object.assign()

Object.assign()是一种可以对非嵌套对象进行深拷贝的方法,如果对象中出现嵌套情况,那么其对被嵌套对象的行为就成了普通的浅拷贝。如果没有嵌套,是可以用这个方法的。

var p1 = { name: 'jack'}var p2 = {}Object.assign(p2,p1);

还有一种类似的方法,就是用JSON进行转换

var p1 = { name: 'jack', age:12}var p2 = JSON.parse(JSON.stringify(p1));p2.name = 'rose';

实际开发中,可能这种方式用的更多一些,比如把一些数据转成json存储到本地缓存,需要用到的时候,我们再反序列化。

4.深拷贝递归function deepCopy(dest,src){ var dest = dest || {}; for(var key in src){ //如果对象的属性又是对象,则递归处理 if(typeof src[key] === "object"){ dest[key]= (src[key].constructor === Array)?[]:{}; deepCopy(dest[key],src[key]); }else{ dest[key]=src[key]; } } return dest;}

测试:

var p1 = { name: 'jack', age:12, toy: { name:'car' }}var p2 = deepCopy({},p1);

可以看到,操作p2并不会影响到p1,这就是递归方式的深拷贝。 

今天的分享就到这里啦,也欢迎大家来我们的学习qun交流哦~~

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

上一篇:简单易懂 关于nextTick()的理解(关于简单的绘画)

下一篇:HTML+CSS+JS 学习笔记(一)———HTML(上)(html/css/javascript)

  • 惠普手提电脑怎么样(惠普手提电脑怎么样)(惠普手提电脑怎样重装系统)

    惠普手提电脑怎么样(惠普手提电脑怎么样)(惠普手提电脑怎样重装系统)

  • iphone6s plus上市时间(iphone6s 内存)(iphone6s plus上市时间)

    iphone6s plus上市时间(iphone6s 内存)(iphone6s plus上市时间)

  • 支付宝红包过期了能看到金额吗(支付宝红包过期了 钱到哪去了呢)

    支付宝红包过期了能看到金额吗(支付宝红包过期了 钱到哪去了呢)

  • 抖音屏蔽一个人看不到我的作品的操作步骤是什么(如何在抖音屏蔽一个人)

    抖音屏蔽一个人看不到我的作品的操作步骤是什么(如何在抖音屏蔽一个人)

  • 华为p40通话声音小怎么办(华为p40接听电话声音小)

    华为p40通话声音小怎么办(华为p40接听电话声音小)

  • 华为手机有hud功能吗(华为手机 hid)

    华为手机有hud功能吗(华为手机 hid)

  • 7.0.14有什么新功能(7.0.0)

    7.0.14有什么新功能(7.0.0)

  • 华为mate30来电铃声渐强怎么关闭(华为mate30来电铃声本地音乐怎么删除)

    华为mate30来电铃声渐强怎么关闭(华为mate30来电铃声本地音乐怎么删除)

  • 苹果充电口怎么清灰尘(苹果充电口怎么拆)

    苹果充电口怎么清灰尘(苹果充电口怎么拆)

  • 手机60hz和120hz的区别(手机60hz和120hz的耗电)

    手机60hz和120hz的区别(手机60hz和120hz的耗电)

  • 佳能mp236警告灯闪烁(佳能mp236警告灯闪烁3次)

    佳能mp236警告灯闪烁(佳能mp236警告灯闪烁3次)

  • 微信属于腾讯大王卡吗(微信是属于腾讯的)

    微信属于腾讯大王卡吗(微信是属于腾讯的)

  • iphone音量键莫名弹出(苹果音量键一直乱跳)

    iphone音量键莫名弹出(苹果音量键一直乱跳)

  • 苹果手机怎么放歌没声音(苹果手机怎么放音乐)

    苹果手机怎么放歌没声音(苹果手机怎么放音乐)

  • 花生日记里的花生小店是什么(花生日日记里面的东西好吗?)

    花生日记里的花生小店是什么(花生日日记里面的东西好吗?)

  • 数据透视表字段名无效什么意思(数据透视表字段名无效怎么解决)

    数据透视表字段名无效什么意思(数据透视表字段名无效怎么解决)

  • 2.0音响和2.1音响的区别(2.0音响和2.1音响 影视)

    2.0音响和2.1音响的区别(2.0音响和2.1音响 影视)

  • nemtl00华为是什么型号(华为nem-tl00多少钱)

    nemtl00华为是什么型号(华为nem-tl00多少钱)

  • vue如何放大字体(vue字体大小自适应)

    vue如何放大字体(vue字体大小自适应)

  • 旺旺红包能提现么(旺旺红包提现到支付宝)

    旺旺红包能提现么(旺旺红包提现到支付宝)

  • vue视频里怎么加图片(vue视频怎么添加背景图片)

    vue视频里怎么加图片(vue视频怎么添加背景图片)

  • 探探左滑代表什么(探探左滑是)

    探探左滑代表什么(探探左滑是)

  • 小米9尺寸长宽高(小米 9 尺寸)

    小米9尺寸长宽高(小米 9 尺寸)

  • win7系统无法启动,出现disk.sys后蓝屏自动重启的解(win7系统无法启用网络发现)

    win7系统无法启动,出现disk.sys后蓝屏自动重启的解(win7系统无法启用网络发现)

  • 怎么免费获取win10家庭版激活密钥 附激活工具(怎么免费获取流量)

    怎么免费获取win10家庭版激活密钥 附激活工具(怎么免费获取流量)

  • 苹果手机清理内存垃圾清理教程(苹果手机清理内存怎么清理微信内存)

    苹果手机清理内存垃圾清理教程(苹果手机清理内存怎么清理微信内存)

  • Linux中tar命令操作文件的基本使用教程(linux命令tar zcvf)

    Linux中tar命令操作文件的基本使用教程(linux命令tar zcvf)

  • Vue3 diff算法图解分析(vue2 diff算法)

    Vue3 diff算法图解分析(vue2 diff算法)

  • Java---泛型(java泛型E和T)

    Java---泛型(java泛型E和T)

  • 即征即退需要缴纳税款吗
  • 企业进入
  • 应交税费应交增值税减免税款
  • 携程代订住宿发票能作为差旅费报销吗
  • 调减加计抵减额会计分录
  • 公司注销员工的人身损害赔偿
  • 增加经营范围需要重新做税种
  • 实际成本法和计划成本法的会计分录
  • 非盈利组织是什么
  • 金税盘全额抵扣分录
  • 供货商对账单跨月返利怎么做账?
  • 成品油进项税转出
  • 现金池 印花税
  • 委外研发费用如何开票
  • 自产产品用于捐赠的会计处理
  • 跨年的费用需要冲减
  • 免息分期怎么还款
  • 资本公积转增股本什么意思
  • 报企业所得税的利润总额怎么填
  • 非独立核算的分公司如何报税
  • 应征增值税不含税销售额(3%征收率)怎么算
  • 企业2015年申报抵扣的增值税,2016年检查有11000元不得抵扣,需要补交增值税11000元并收滞纳金及罚款1200元,请问老师具体该怎么做账,谢谢
  • 资管新规出台目的
  • 中介公司属于工业企业吗
  • 购买办公桌椅属于什么费用
  • 收到投资款怎么做凭证
  • 门店里备用客户喝的茶叶怎么入账?
  • 1697509246
  • windows10如何设置密码
  • 其他应付款调整
  • 旅行社差额征税税率5%
  • wordpress主题0skr
  • 进销存单据
  • kazaalite.exe是什么进程 kazaalite进程有什么用
  • mgaqdesk.exe进程有什么作用 mgaqdesk进程查询
  • 小白学php需要多久能上手
  • PHP:mcrypt_module_close()的用法_Mcrypt函数
  • 应收债权与应付债务
  • 管理费用属于产品成本项目的费用吗
  • 应付债券的应付利息怎么计算
  • 日落之前是什么时辰
  • thinkphp post
  • 相见恨晚求下联
  • 小微企业认定标准时间
  • 什么叫点云数据
  • 增值税 转出
  • 租房开的发票收的税怎么做账?
  • 如何设置linux
  • 残保金的滞纳金怎么算
  • 对外销售产品会计分录
  • 以旧换新会计科目
  • 企业收到的政府补助属于
  • 公司内部核算调研报告
  • 减免税款借方有利息吗
  • 用友软件如何反结账流程
  • 现金流量表和利润表的勾稽关系
  • 公司发放工资的形式
  • 短期投资怎么记账
  • sql时间格式化大全
  • windows不认u盘
  • 微软今天正式停产了吗
  • centos6关闭图形界面
  • centos7 目录结构
  • Linux rpm包中的64位、32位、i386、i586、Noarch名词解释
  • 慎用小儿百部止咳糖浆
  • 微信小程序实现人脸识别
  • jquery添加css样式
  • unity游戏人物选择
  • vue中父子组件如何通信的
  • 天气球球下载
  • zigzag源码
  • pythonnumpy报错
  • jquery自带的弹出框
  • python绘图题
  • 增值税纳税申报操作流程和内容
  • 无偿转让股权要交税吗
  • 山东省地税局电话号码
  • 日本各界
  • 新企业会计准则长期待摊费用
  • 社会保险登记表下载
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设