【JavaScript】深拷贝

深浅拷贝复杂数据类型(引用数据类型),简单数据类型(基本数据类型)没有深浅的说法

1、Object.assign()

如果对象的属性值为简单数据类型(string,number),为深拷贝;如果属性值为复杂数据类型就是浅拷贝的,因为只拷贝了复杂数据类型的引用地址。

2、JSON.stringify 和 JSON.parse

function deepClone(obj) {
  let obj1 = JSON.stringify(obj);
  let oClone = JSON.parse(obj1);

  return oClone;
}

3、jQuery extend方法

let obj = {
   a: {
     b: {
       c: {}
     }
   }
};
let obj1 = $.extend(true, {}, obj);

4、lodash.cloneDeep()

let lodash = require('lodash');
let obj1 = {
    a: 1,
    b: { f: { g: 1 } },
    c: [1, 2, 3]
};
let obj2 = lodash.cloneDeep(obj1);

5、递归的实现深拷贝

function deepClone(obj) {
  let target;
  if (typeof source === 'object') {
    target = Array.isArray(obj) ? [] : {};
    for (let key in obj) {
      if (obj.hasOwnProperty(key)) {
        if (typeof obj[key] !== 'object') {
          target[key] = obj[key];
        } else {
          target[key] = deepClone(obj[key]);
        }
      }
    }
  } else {
    target = obj;
  }
  return target;
}

你可能感兴趣的:(【JavaScript】深拷贝)