JS深拷贝与浅拷贝

1.基本概念

  • (1)深拷贝和浅拷贝针对的是引用类型。基本类型的名值存储在栈中,当复制时,栈内存会开辟一个栈内存。所以二者修改时,彼此不会影响

  • (2)浅拷贝复制的是指向对象的指针,并没有开辟新的栈内存,原对象和新对象还是共享同一块内存,修改新对象自然会影响原对象。

深拷贝会开辟新的栈内存,原对象和新对象不共享同一块内存,修改新对象不会影响到原对象。
在这里插入图片描述

2.实现方式

2.1深拷贝的实现方式
  • 2.1.1 JSON.parse(JSON.stringify())

说明:
1.用JSON.stringify将对象转成JSON字符串,再用**JSON.parse()**把字符串解析成对象。一去一来,新的对象产生了,而且对象会开辟新的栈,实现深拷贝。

2.这种方法虽然可以实现数组或对象的深拷贝,但不能处理函数。因为JSON.stringify() 方法是将一个JavaScript值(对象或者数组)转换为一个 JSON字符串,不能接受函数

示例:

var iniArr = [1,2,{
   name:"peter"},function(){
   }];
var newArr = JSON.parse(JSON.stringify(iniArr));
newArr[1] = 8;
newArr[2].name = "lily";
console.log('JSON.parse(Json.stringfiy()):iniArr,newArr',iniArr,newArr

打印结果:
在这里插入图片描述

  • 2.1.2递归方法

原理:

遍历对象、数组,直到里边都是基本数据类型,然后再去复制,即可实现深度拷贝。

示例:

 var iniObj = {
   
      a: 1,
      b: [1, 2, 3],
      c: {
   
          d: {
   
              e: 4
          }
      },
      fun: function(){
   
          return 999;
      }
  };

  function deepClone(x) {
   
      if (x.constructor === Object) {
   
          var obj = {
   }
          for (var k in x) {
   
              obj[k] = deepClone(x[k])
          
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值