数组的深复制与浅复制
首先先了解一下深复制和浅复制的官方概念。
深复制:
是将指向内容复制到给当前对象新分配的缓冲区中的一种复制方式,相对于浅复制。
浅复制:
浅复制是指当对象的字段值被复制时,字段引用的对象不会被复制。
相信在座的各位看完官方概念都没有几个看懂的,接下来我将展示我所理解的深复制与浅复制。
深复制 - 复制数组中的元素内容(数据) 浅复制 - 复制数组的内存地址
接下来用数组的复制来进行解析深复制与浅复制的区别,示例代码如下:
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的数据内容不随之改变。 */