数组的深复制与浅复制
首先先了解一下深复制和浅复制的官方概念。
深复制:
是将指向内容复制到给当前对象新分配的缓冲区中的一种复制方式,相对于浅复制。
浅复制:
浅复制是指当对象的字段值被复制时,字段引用的对象不会被复制。
相信在座的各位看完官方概念都没有几个看懂的,接下来我将展示我所理解的深复制与浅复制。
深复制 - 复制数组中的元素内容(数据)
浅复制 - 复制数组的内存地址
接下来用数组的复制来进行解析深复制与浅复制的区别,示例代码如下:
var arr1 = [1,2,3,4,5]
//浅复制
var arr2 = arr1;
arr2[2] = 6;
console.log(arr2,arr1)
/*
输出结果为:[ 1, 2, 6, 4, 5 ] [ 1, 2, 6, 4, 5 ],因为是浅复制,arr2
和arr1的数据内容指向相同的地址,所以arr2的内容改变,arr1的数据内容也随之改变。
*/
// 深复制
var arr3 = [];
for (var i=0;i<arr1.length;i++){
arr3[i] = arr1[i];
}
console.log(arr3);//[ 1, 2, 3, 4, 5 ]
arr3[2] = 6;//改变arr3中位置为3的数据
console.log(arr3,arr1);//打印arr3和arr1
/*
输出结果为:[ 1, 2, 6, 4, 5 ] [ 1, 2, 3, 4, 5 ]。因为是深复制,所以arr3
只是复制了arr1的数据内容,所以arr3的数据内容改变,arr1的数据内容不随之改变。
*/