浅拷贝:
直接将一个引用数据类型的地址,赋值给另一个变量存储称为浅拷贝
此时两个变量存储的是相同的内存地址,如果一个操作,另一个就会跟着改变。
<script>
// 此时arr1中存储的是数组的内存地址
var arr1 = [1,2,3,4,5]
// 将arr1中存储的内存地址赋值给arr2,两个变量中存储相同的内存地址
var arr2 = arr1;
// 此时操作arr1,arr2也会改变
// 因为rr1和arr2,同时存储的是相同的内存地址,操作的也就是同一个数组
// 同理如果操作arr2,arr1也会相应改变
arr1[0] = '武汉';
// 输出结果["武汉", 2, 3, 4, 5]["武汉", 2, 3, 4, 5]
console.log(arr1,arr2)
</script>
深拷贝:
将引用数据类型中的数据内容赋值给另一个变量存储称为深拷贝
此时变量中存储的是引用数据类型的数据内容,而不是内存地址,如果一个操作,另一个不会改变,两个变量没有任何关系。
var arr3 = ['北京','上海','广州','重庆','天津'];
// 定义一个新数组用来存储数据
var arr4 = [];
// 循环遍历,获取arr3中的所有单元数据,将它们写入到arr4中
for(var key in arr3){
arr4.push(arr3[key]);
}
// 改变arr3的其中一个单元,arr4并不受影响
arr3[0] = '武汉'
// arr3输出结果是["武汉", "上海", "广州", "重庆", "天津"]
// arr4输出结果是["北京", "上海", "广州", "重庆", "天津"]