JavaScript对象复制明白

最近在研讨js对象的深拷贝,下面是我实验的两种要领,一种是经由过程JSON.stringify和JSON.parse的要领完成的深拷贝,一种是经由过程递归函数完成的深拷贝。

此处有个题目,第二种要领完成了对象要领的拷贝,然则不是深拷贝,网上找了良久都没有找到完成对象的要领深拷贝的要领,愿望有大神能给点发起。

let obj = {
  a: 1,
  b: '2',
  c: {
    c1: 1
  },
  d: function () {
    console.log('d');
  },
  e: [1, 2, 3]
};
//运用JSON.parse和JSON.stringify的要领是深拷贝,除了function,其他的都能拷贝
let obj_copy1 = JSON.parse(JSON.stringify(obj));
console.log(obj_copy1);
console.log(obj.c === obj_copy1.c); //结果是false,对象是深拷贝

// 运用递归的要领复制,function能够复制,除了function是浅拷贝,其他的都是深拷贝
function clone(obj) {
  let new_obj = {};
  for(let key in obj) {
    let t = ( typeof obj[key] ).toLowerCase();
    if (t === 'object') {
      if(obj[key] instanceof Array) {
        var new_arr = [];
        for(let item of obj[key]) {
          new_arr.push(item);
        }
        new_obj[key] = new_arr;
      } else {
        new_obj[key] = clone(obj[key]);
      }
    } else {
      new_obj[key] = obj[key];
    }
  }
  return new_obj;
}

let obj_copy2 = clone(obj);
console.log(obj_copy2);
console.log(obj.c === obj_copy2.c); //结果是false,对象是深拷贝
console.log(obj.d === obj_copy2.d); //结果是true,function不是深拷贝

    原文作者:上帝遗忘之子
    原文地址: https://segmentfault.com/a/1190000017986447
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞