【JS】深拷贝与浅拷贝


深拷贝和浅拷贝都是处理对象或数据的复制操作

浅拷贝

  • 浅拷贝创建一个的对象,复制的是原对象的引用
  • 新对象与原对象共用一个相同的内存地址,因此改变新对象也会影响原对象。

实现浅拷贝的方法

扩展运算符

扩展运算符可以实现单层深拷贝,改变新对象不会影响原对象,但如果对象中的属性值是引用类型,发生改变会影响原对象

    let obj = {
        "name": "zs",
        "age": 20,
        "children": { 'name': 'ls', 'age': 10 }
    }
    // 扩展运算符实现浅拷贝
    let ShallowCopy = { ...obj }
    ShallowCopy.children.name = "ww";//两个对象children.name都变成ww
    ShallowCopy.age = 19//只有新对象的age会改变
    console.log(obj);
    console.log(ShallowCopy);

在这里插入图片描述

深拷贝

  • 浅拷贝会创建一个新的对象,复制的是原对象的值
  • 新对象与原对象有不同的内存地址,因此两个对象之间相互独立,发生改变也会不影响

实现深拷贝的方法

递归

var obj = {
      obj_1: {
        age: 20,
      },
      arr: [1, 2, 3],
    }
    var newObj = {}
    function deepCopy(obj, newObj) {
      for (key in obj) {
        if (obj[key].constructor == Array) {
          newObj[key] = []
          recursion(obj[key], newObj[key])
        } else if (obj[key].constructor == Object) {
          newObj[key] = {}
          recursion(obj[key], newObj[key])
        }else {
            newObj[key] = obj[key]
        }
      }
    }
    deepCopy(obj, newObj)//函数调用
    //进行验证,改变newObj中的age不影响obj中的age
    newObj.obj_1.age = 18
    console.log(newObj)
    console.log(obj);

在这里插入图片描述

JSON.parse(JSON.stringify())

  • 原理:用 JSON.stringify 将对象转成 JSON 字符串,再用 JSON.parse()把字符串解析成新的对象。
    let obj = {
        "name": "zs",
        "age": 20,
        "sex": "man"
    }
    let newObj = JSON.parse(JSON.stringify(obj))
    obj.age = 30;
    console.log(obj);
    console.log(newObj);

在这里插入图片描述

  • 11
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值