JavaScript复制数组方式

浅拷贝

    var arr1 = [1, 2, 3];
    var arr2 = arr1;
    arr2[0] = 0;
    console.log(arr1);
    console.log(arr2);

这种数组拷贝方式就是浅拷贝,因为JavaScript存储对象都是存地址的,所以浅复制会导致 arr1 和 arr2 指向同一块内存地址,这样更改arr1或者arr2的时候影响的都是同一个数组。

深拷贝

深拷贝的两种方式

slice实现深拷贝

    var arr1 = [1, 2, 3];
    var arr2 = arr1.slice();
    arr2[0]=0;
    console.log(arr1);
    console.log(arr2);

concat实现深拷贝

    var arr1 = [1, 2, 3];
    var arr2 = arr1.concat();
    arr2[0]=0;
    console.log(arr1);
    console.log(arr2);

这种数组拷贝方式就是深拷贝,而深拷贝一般都是开辟一块新的内存地址,将原对象的各个属性逐个复制出去。

你可能感兴趣的:(JavaScript复制数组方式)