深拷贝和浅拷贝及应用场景

深浅拷贝,都是拷贝对象内的数据到新对象,新旧对象内的数据相同。

1.浅拷贝

只拷贝对象的第一层属性,如果对象中还有对象,只是拷贝的内存地址(引用),两者修改会相互影响。用于对象中都是基本数据类型的情况。

2.深拷贝

拷贝对象的多层属性,如果对象中还有对象,会继续拷贝,使用递归实现。

3.深浅拷贝的实现

浅拷贝:

function copy(oldObj) {
        let newObj = {};
        for (let k in oldObj) {
          newObj[k] = oldObj;
        }
        return newObj;
      }

深拷贝:

function deepCopy(oldObj) {
        let newObj = {};
        for (let k in oldObj) {
          if (oldObj[k] instanceof Array) {
            newObj[k] = [];
            newObj[k] = deepCopy(oldObj);
          } else if (oldObj[k] instanceof Object) {
            newObj[k] = {};
            newObj[k] = deepCopy(oldObj);
          } else {
            newObj[k] = oldObj[k];
          }
        }
        return newObj;
      }

 4.深浅拷贝的应用场景

查看很多网友分享的业务需求后,我觉得深浅拷贝的应用场景可以用一句话总结:我想要使用这个对象内的数据,但是不想修改原本的对象内的数据内容时,使用深浅拷贝来复制数据,并对新的对象内的数据进行操作。




原文地址:https://www.cnblogs.com/mandymm/p/13967633.html