JSON.parse()、JSON.stringify()实现深拷贝应注意问题

本文探讨了使用JSON.parse(JSON.stringify())实现深拷贝的方法及其局限性,特别是当拷贝对象包含正则表达式、函数或undefined等特殊值时的问题。

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

我们都知道,实现数据深拷贝,我们大多数人都是用的JSON.parse(JSON.stringify())方法,比如:

    function deepClone(obj){
      let obj_ = JSON.stringify(obj),
      loneObj = JSON.parse(obj_);
      return loneObj
    }
    let a=[1,2,3,4],
    b=deepClone(a);
    b[0] = 2;
    console.log(a,b);

打印结果:

我们在代码中对拷贝出来的b数组做了修改,a数组并没有被修改,所以实现了深拷贝。

但是:

如果拷贝对象包含正则表达式,函数,或者undefined等值,此方法就会出现问题

    function deepClone(obj){
      let obj_ = JSON.stringify(obj),
      loneObj = JSON.parse(obj_);
      return loneObj
    }
    let a={
      regex:/^\s*/g,
      desc:'去掉字符串左侧空白字符正则'
    },
    b=deepClone(a);
    console.log(a,b);

打印结果:

可见,这里没有实现深拷贝。所以这方法也不是万能的。

其他包含函数、undefined的情况,小伙伴可以自己测试看看结果,依旧是拷贝失败。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值