js深浅拷贝


浅拷贝进行拷贝时只会复制指向某个对象的指针,而不会复制对象的本身,新旧对象还是共用同一块内存,当我们修改其中一个对象内容的时候,另一个也会受到影响。深拷贝的话进行拷贝时就是创建一个与旧对象完全一样的的对象,新对象和旧对象不共用同一块内存,修改其中一个对象的内容另外一个不会受到牵连。

浅拷贝方法:

1.通过Object.assign

function shallowcopy(obj){
      return newobj = Object.assign({},obj);
    }

2.通过Array.prototype.concat(),只能传数组

function shallowcopy(obj) {
      return newobj = obj.concat();
    }

3.通过Array.prototype.slice(),只能传数组

function shallowcopy(obj) {
      return newobj = obj.slice();
    }

4.通过循环

function shallowcopy(obj) {
      var newobj = {};
      for (var prop in obj) {
        if (obj.hasOwnProperty(prop)) {
          newobj[prop] = obj[prop];
        }
      }

      return newobj;
    }

深拷贝方法:

1.通过JSON.parse(JSON.stringify()),这种办法无法实现对对象中方法的深拷贝

function deepcopy(obj) {
      return newobj = JSON.parse(JSON.stringify(obj))
    }

2.通过循环

function deepcopy(obj) {
      let newobj = Array.isArray(obj) ? [] : {};
      if (obj && typeof obj === 'object') {
        for (key in obj) {
          if (obj.hasOwnProperty(key)) {
            if (obj[key] && typeof obj[key] === 'object') {
              newobj[key] = deepcopy(obj[key])
            } else {
              newobj[key] = obj[key];
            }
          }
        }
      }
      return newobj;
    }

相关