深拷贝

102 阅读1分钟

深拷贝 使用:Object,Array 深拷贝不会拷贝引用类型的引用,而是将引用类型的值全部拷贝一份,形成一个新的引用类型,这样就不会发生引用错乱的问题,使得我们可以多次使用同样的数据,而不用担心数据之间会起冲突.

1.JSON.parse(JSON.stringify(data)) 缺点: 不可以拷贝 undefined , function, RegExp 等等类型的

2.Object.assign(target, source); // let a = Object.assign({}, b); 缺点:多层嵌套时,修改数据会有问题

3.递归拷贝

function deepClone(obj) {
    if(obj === null) return null;
    if(obj instanceof RegExp) return new RegExp(obj);
    if(obj instanceof Date) return new Date(obj);
    if(typeof obj !== 'object') {
     return obj;
    }
    let t = new obj.constructor();
    for(let key in obj) {
     t[key] = deepClone(obj[key]);
    }
    return t;
}