前端经典面试题:深拷贝和浅拷贝

一、写在前面在任何编程语言中,都存在深拷贝和浅拷贝的概念,js当然也不例外。在对一个现有对象进行拷贝的时候是有深拷贝和浅拷贝之说的,他们在实际使用中区别还是挺大的,如果不弄清原因,可能在工作中遇到错误不好排查。二、什么是深拷贝和浅拷贝首先需要明白的一点是:深拷贝和浅拷贝针对的是对象进行操作的。那么就先来看看深拷贝和浅拷贝的具体概念。在js中,除了基本数据类型以外,还存在引用数据类型。而在一般使用赋值语句=的时候。对于基本数据类型,实际上只是拷贝它的值,但是对于对象而言,其实赋值的是这个对象的内存引用
摘要由CSDN通过智能技术生成

一、写在前面

在任何编程语言中,都存在深拷贝和浅拷贝的概念,js当然也不例外。在对一个现有对象进行拷贝的时候是有深拷贝和浅拷贝之说的,他们在实际使用中区别还是挺大的,如果不弄清原因,可能在工作中遇到错误不好排查。

二、什么是深拷贝和浅拷贝

首先需要明白的一点是:深拷贝和浅拷贝针对的是对象进行操作的。那么就先来看看深拷贝和浅拷贝的具体概念。
在js中,除了基本数据类型以外,还存在引用数据类型。而在一般使用赋值语句=的时候。对于基本数据类型,实际上只是拷贝它的值,但是对于对象而言,其实赋值的是这个对象的内存引用(内存地址),将原来对象的引用传递过去,实际上新对象和旧对象使用的是同一个内存引用(地址)。
而深拷贝和浅拷贝就是在这个基础上做的区分,如果在拷贝这个对象的时候,只对基本数据类型进行了拷贝,而对引用数据类型只是做了引用的传递,而没有重新开辟一个内存空间存放这个对象,则认为是浅拷贝。反之,在对引用数据类型进行拷贝的时候,创建了一个新的对象(开辟新的内存空间),并且复制其内的变量,则认为是深拷贝。

所以到现在,就应该了解,所谓的深拷贝和浅拷贝,只是在拷贝对象的时候,在其中引用类型变量的不同操作(是否为其开辟新的内存空间)而已。

三、js如何实现深拷贝和浅拷贝

由于浅拷贝比较容易实现,所以从易到难开始介绍:
1. 浅拷贝
现在的需求是把变量obj拷贝给’o’

  let obj = {
   
    name: 'lwf',
    age: 18,
    color: ['红色', '蓝色'],
    like: {
   
      game: '玩游戏',
      sport: '打乒乓'
    }
  }

  let o = {
   }
//浅拷贝
  copy = (newObj, oldObj) => {
   
    for (let k in oldObj) {
   
      newObj[k] = oldObj[k]
    }
  }

  copy(o, obj)

  o.name = 'cll'
  o.color.push('绿色')
  console.
  • 7
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值