Object.assign实现深复制的方式

本文介绍了JavaScript中Object.assign方法的基本用法及其深浅拷贝的区别。通过实例演示了如何利用该方法进行对象的合并,并解释了不同情况下目标对象与源对象之间的关系,最后给出了实现深复制的两种常见方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Object.assign方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)。

const target = { a: 1 };
const source1 = { b: 2 };
const source2 = { c: 3 };
Object.assign(target, source1, source2);
target // {a:1, b:2, c:3}

Object.assign方法的第一个参数是目标对象,后面的参数都是源对象。
这里主要是说这个方法的深浅复制
首先需要明确的是使用Object.assign方法生成的对象,是target对象,即函数的第一个参数,我们这样定义:

      let a1 = { a: 1 }
      let b1 = { b: 1 }
      let newData = Object.assign(a1, b1)

此时,newData的值是a1(目标对象)的值,两者是完全一样的,修改a1 的值就是修改 newData的值,修改newData的值就是修改a1的值,这是浅复制,如果Object.assign只有一个参数let newData = Object.assign(a1),就是说方法中只有目标对象,目标对象和newData是浅复制,是相互影响的。
源对象(第二个以后的参数)改变是不会影响目标对象的,同样,目标对象改变也不会影响源对象,所以当我们想实现深复制的方式的两种方式:例如我们想深复制数据a 生成一个新对象newData
第一: let newData = Object.assign({}, a)
此时,目标对象是定义了一个空对象,a 作为源对象,生成对象只和空对象(目标对象)有关,a(源对象)的改变不会影响新对象newData,当然新对象的改变也不会影响源对象,只会影响目标对象(空对象),如此一来就实现了浅复制
第二: let newData =JSON.parse(JSON.stringify(a))

总结,我们要是想要生成的数据和原数据互不影响的话,就把原数据放在源对象的位置上,第一个参数之后。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值