浅拷贝&深克隆

363 阅读1分钟

浅拷贝

  • 对于基本数据类型,将变量的值赋值给新的变量;
  • 对于引用数据类型,将变量的地址赋值给新的变量;

浅拷贝

深克隆

  • 对于基本数据类型,将变量的值赋值给新的变量;
  • 对于引用数据类型,将变量的属性逐一读取后,再逐一赋值给新的变量;

深克隆封装方法

/*遍历方式*/
function deepClone(obj){
  // 判断obj的类型 分别声明数组或对象
  var objClone = Array.isArray(obj) ? [] : {};
  if(obj && typeof obj==="object"){
    for(key in obj){
      //判断obj子元素是否为对象,如果是,递归复制
      if(obj[key] && typeof obj[key] === "object"){
        objClone[key] = deepClone(obj[key]);
      }else{
        //如果不是,简单复制
        objClone[key] = obj[key];
      }
    }
  } else {
    // 非数组或对象 直接赋值返回
    objClone = obj;
  }
  return objClone;
}
/*JSON方式*/
function deep_clone(obj){
    return JSON.parse(JSON.stringify(ogj));
}