深拷贝 浅拷贝

一、对象深拷贝实现

1. 使用递归的方式实现深拷贝

function deepClone(obj){

  let objClone =  Array.isArray(obj) ? [] : {};

  if (obj && typeof obj === 'object') {

    for(let key in obj){

      if (obj[key] && typeof obj[key] === 'object'){

        objClone[key] = deepClone(obj[key]);

      }else{

        objClone[key] = obj[key]

      }

    }

  }

  return objClone;

}

2、通过JSON对象实现深拷贝 (无法实现对象中方法的深拷贝)

3、通过Object.assign()拷贝

注意: 当对象只有一级属性为深拷贝;当对象中有多级属性时,二级属性后就是浅拷贝


二、数组深拷贝实现

1、concat(arr1, arr2,....)

注意:当数组中的元素均为一维是深拷贝, 数组中元素一维以上是值的引用

2. slice(idx1, idx2)

参数可以省略

1)没有参数是拷贝数组

2)只有一个参数是从该位置起到结束拷贝数组元素

3)两个参数,拷贝从起始位置到结束位置的元素(不包含结束位置的元素:含头不含尾)

注意:当数组中的元素均为一维是深拷贝,数组中元素一维以上是值的引用


你可能感兴趣的:(深拷贝 浅拷贝)