JS深拷贝和浅拷贝

浅拷贝是拷贝一层,深层次的对象级别的就拷贝引用;深拷贝是拷贝多层,每一级别的数据都会拷贝出来;

浅拷贝常见方法:

1.使用for in 不递归

2. ES6中的Object.assign方法

var obj = {
        name: "2qzz",
        like: "aurora"};
      let obj2 ={}
      
      Object.assign(obj2,obj)
      obj.age.b = 5
      console.log(obj2)

Object.assign()是可以拷贝一层,如果对象只有一层的话,可以使用这个函数作为深拷贝

深拷贝常见方法:
深拷贝有多少层拷贝多少层,并且会开辟全新空间

1.使用 for in 循环

var obj = {
        name: "2qzz",
        like: "aurora",
        age: {
          a: 1,
          b: 2,
        },
      };
        function cloneObj(obj) {
            let clone = {};
            for (let i in obj) {
                if (typeof obj[i] == "object" && obj[i] != null) { //注意这里是object 不是Object
                    clone[i] = cloneObj(obj[i]);
                } else {
                    clone[i] = obj[i]
                }
            }
            return clone
        }
        let clone =  cloneObj(obj);
        obj.age.a = '100'
        console.log(obj)
        console.log(clone)
```javascript
在这里插入代码片

2.如果对象里面有数组怎么办,数组也跟对象一样是引用类型,那么我们可以在开头加个判断它是对象还是数组,数组的话赋空数组,一样遍历拷贝:

 function cloneObj(obj) {
        // 通过原型链判断 obj 是否为数组
        if (obj instanceof Array) {
          var clone = [];
        } else {
          var clone = {};
        }
        for (let i in obj) {
          // 如果为对象则递归更进一层去拷贝
          if (typeof obj[i] == "object" && obj[i] != null) {
            clone[i] = cloneObj(obj[i]);
          } else {
            clone[i] = obj[i];
          }
        }
        return clone;
      }

3.使用 JSON方法 转换

var obj = {
        name: "2qzz",
        like: "aurora",
        age: {
          a: [1, 2, 3],
          b: 2,
        },
      };

      let obj2 = JSON.parse(JSON.stringify(obj))
      console.log(obj2)

参考文章:https://bbs.huaweicloud.com/blogs/296102?utm_source=zhihu&utm_medium=bbs-ex&utm_campaign=other&utm_content=content

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值