js浅拷贝和深拷贝

// 数组浅拷贝
var ary = [1,'a',true,null,undefined];
var arySC = ary.slice();
var aryCC = ary.concat();
var aryFC = Array.from(ary);
var aryMC = ary.map(function(item){
    return item;
});

// 对象浅拷贝
var obj = {a: 1,b: 2,};
var objAC = Object.assign({}, obj);

// 通用浅拷贝
var aryC = [...ary];
var objC = {...obj};

// 通用深拷贝
var jsonc = JSON.parse(JSON.stringify(ary/obj));
// 无法实现对函数 、RegExp等特殊对象的克隆
// 会抛弃对象的constructor,所有的构造函数会指向Object
// 对象有循环引用,会报错

// 函数实现深拷贝
function deepClone(source) {
  if (!source || typeof source !== "object") {
    throw new Error("error arguments");
  }
  var targetObj = source.constructor === Array ? [] : {};
  for (var keys in source) {
    if (source.hasOwnProperty(keys)) {
      if (source[keys] && typeof source[keys] === "object") {
        targetObj[keys] = source[keys].constructor === Array ? [] : {};
        targetObj[keys] = deepClone(source[keys]);
      } else {
        targetObj[keys] = source[keys];
      }
    }
  }
  return targetObj;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。