深拷贝和浅拷贝的定义及所有深拷贝的实现方式?

浅拷贝

定义:拷贝的就是内存地址 ,所以如果其中一个对象改变了这个地址,就会影响到另一个对象。直接通过一个对象赋值给另一个对象即可 a = b。

深拷贝

定义:将一个对象从内存中完整的拷贝一份出来,从堆内存中开辟一个新的区域存放新对象,且修改新对象不会影响原对象。
1、concat() 拼接
var arr = [];
var arr1 = [].concat(arr);
2、slice() 截取
var arr = [];
var arr1 = arr.slice();
3、for循环或者递归的方式实现
var arr = [];
var arr1 = [];
for(var i=0; i<data.length;i++){
    arr1.push(arr[i]);
}
// 递归
function _deepClone(source){
  let target;
  if(typeof source === 'object'){
    target = Array.isArray(source) ? [] : [];
    for( let key in source) {
      if(source.hasOwnProperty(key)) {
        if(typeof source[key] !== 'object') {
          target[key] = source[key];
        } else {
          target[key] = _deepClone(source[key]);
        }
      }
    }
  } else {
    target = sourece;
  }
  return target;
}
4、通过JSON进行类型转换
var arr1 = JSON.parse(JSON.stringify(arr));    //深拷贝常用方法
5、ES6 扩展运算符(...)
var arr3 = [...arr];
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容