js 浅拷贝深拷贝

不管是浅拷贝还是深拷贝都是针对js引用类型复制

1、浅拷贝
对于引用类型的复制:

var a  = { a: 1}

b = a

当改变b的值, a的值也会发生改变(复制的是占内存的地址)

但是对于基本类型

var a = '1'

b = a

当改变b 的值 a确不会改变(这就相当于深拷贝,复制的是栈内存的内容)

2、第一层的深拷贝

js 原生方法的concat slice(第二层就是浅拷贝)

3、深拷贝

深拷贝就是在堆内内存专门开辟一个新的内存

常用的深拷贝方法:

1. JSON.parse(JSON.stringify()) 缺点: 无法实现对对象中方法的深拷贝,会显示为undefined

2.手动的深拷贝

// deepCopy
function deepCopy(data) {
    const t = typeOf(data);
    let o;

    if (t === 'array') {
        o = [];
    } else if ( t === 'object') {
        o = {};
    } else {
        return data;
    }

    if (t === 'array') {
        for (let i = 0; i < data.length; i++) {
            o.push(deepCopy(data[i]));
        }
    } else if ( t === 'object') {
        for (let i in data) {
            o[i] = deepCopy(data[i]);
        }
    }
    return o;
}
 
posted @ 2021-07-28 09:01  俺村最亮的仔  阅读(95)  评论(0)    收藏  举报