js对象进行深拷贝的方式

关于js实现对象深拷贝的方式,首先js中的对象如同java中的复杂数据类型,普通的赋值运算符进行的赋值进行的只是栈内存中的关于堆内存中对象的引用。如何实现对象的深拷贝,这里可以给出三种解决方案。
第一种,使用JSON.parse以及JSON.stringify。弊端如下:
1.如果对象中存在循环引用的情况也无法正确实现深拷贝
2.如果obj里有NaN、Infinity和-Infinity,则序列化的结果会变成null
3.如果obj里有函数,undefined,则序列化的结果会把函数或 undefined丢失

let target = JSON.parse(JSON.stringify(a))

第二种:利用递归的方式

function deepCopy(s) {
    const target = {}
    for (let k in s) {
      if (typeof s[k] == 'object') {
        d[k] = deepCopy(s[k])
      } else {
        d[k] = s[k]
      }
    }
    return target
  }
  console.log(deepCopy(a));

第三种方式:利用es6中Object.assign的方法将源对象的所有可枚举属性复制到目标对象中。

  let target = {}
  Object.assign(target,a)

有关Object.assign方法的说明:它至少需要两个参数,第一个参数是目标对象,第二个是源对象。如果两个参数任意一个不是对象,则会报错。同时,如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性覆盖前面的属性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值