js相关知识点,深度剖析相关关联

1.Object.assign实现的是浅拷贝还是深拷贝?
在这里插入图片描述
下面举个例子说明:

 let s = { a: { b: 1 }, c: 1 }
 let target = Object.assign({}, s)
 console.log(target) // { a: { b: 1 }, c: 1 }
      s.a.b = 2
      s.c = 3
      console.log(s) // { a: { b: 2 }, c: 3 }
      console.log(target) // { a: { b: 2 }, c: 1 }

target.a.b的值随着source变化而变化,对于b来说就是浅拷贝,拷贝了b的指针,但是target.c的值并没有随着source变化因为对c来说是深拷贝,s和target 里面的值互不打扰。
在这里插入图片描述

针对使用深拷贝,需要使用其他方法,因为

Object.assign()拷贝的是属性值,如果源对象的属性值是一个指向对象的指针,那也只拷贝那个指针。

所以如果对象的属性值为基础类型,通过Object.assign()拷贝的那个属性而言是深拷贝。

如果对象的属性值为引用类型,通过Object.assign()拷贝的那个属性而言是浅拷贝

总之:深拷贝就是重新生成一个对象,并将原对象的值复制过来。两个对象的值互不干扰
而浅拷贝就是把原对象的地址进行复制了一份,2个对象指向同一指针,所以值也同时跟着改变。
浅拷贝就是拷贝一个地址,深拷贝就是生成2个对象

在这里插入图片描述
在这里插入图片描述

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值