浅拷贝,深拷贝

深拷贝:增加了一个指针并且申请了一个新的内存,使这个增加的指针指向这个新的内存

1.递归递归去复制

function deepCopyTwo(obj) {
    let objClone = Array.isArray(obj) ? [] : {};
    if (obj && typeof obj == 'object') {
        for (const key in obj) {
            //判断obj子元素是否为对象,如果是,递归复制
            if (obj[key] && typeof obj[key] === "object") {
                objClone[key] = deepCopyTwo(obj[key]);
            } else {
                //如果不是,简单复制(针对数组)
                objClone[key] = obj[key];
            }
        }
    }
    return objClone;
}
  
  let a=[1,22,32,4],
  b=deepClone(a);
  a[0]=2;
  console.log(a);   //[2, 22, 32, 4]
  console.log(b);   //[1, 22, 32, 4]

2、JSON.parse(JSON.stringify(o))

function deepCopy(o) {
    return JSON.parse(JSON.stringify(o))
}

var c = {
    age: 1,
    name: undefined,
    sex: null,
    tel: /^1[34578]d{9}$/,
    say: () => {
        console.log('hahha')
    }
}
// { age: 1, sex: null, tel: {} }
需要注意的是:这种拷贝方法不可以拷贝一些特殊的属性(例如正则表达式,undefine,function)

浅拷贝:是增加了一个指针指向已存在的内存地址

1、= 复制

let a=[0,1,2,3,4],b=a;
console.log(a===b);   //true
a[0]=1;
console.log(a);  //[1, 1, 2, 3, 4]
console.log(b)  //[1, 1, 2, 3, 4]

2、object.assign(target,source)

原文地址:https://www.cnblogs.com/init00/p/12612321.html