深克隆和浅克隆

什么是深克隆和浅克隆

克隆,就是将变量的值复制到新的变量中

浅克隆

对于基本数据类型而言,不存在深克隆和浅克隆的说法,否是将值进行复制,然后赋值到新的变量当中

而对于引用数据类型来说,浅克隆进行复制是将原本存在栈中变量保存的地址,复制给新的变量,此时两个变量指向的是相同的堆内存,当改变原来的对象时,实质上是改变的堆内存中的内容,由于两个对象指向的是同一个内存,所以新对象的内容也会改变

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

深克隆

而对于引用数据类型来说,深克隆进行复制是在内存中开辟一个新的空间,这个空间保存的内容与原来的内容完全相同但是两个内存相互独立

如何实现深克隆

  • JSON
var arr1 = [1, 2, 3];
var arr2 = arr1;
arr2[0] = 99;
console.log(arr1);//[99, 2, 3]
var arr3 = JSON.parse(JSON.stringify(arr1));
arr3[0] = 199;
console.log(arr1);

var arr4 = {name:'张三'};
var arr5 = arr4;
arr4.name = '李四';
console.log(arr5);//{name:'李四'}
var arr6 = JSON.parse(JSON.stringify(arr4));
arr4.name = '李四'
console.log(arr1);//{name:'张三'}
  • 使用遍历复制
var arr1 = [1, 2, 3];
var arr2 = [];
for(var i in arr1){
	arr2.push(arr1[i]);
}
console.log(arr2);

var arr1 = {name: '张三', age: 18};
var arr2 = {};
for (var i in arr1) {
    arr2[i] = arr1[i];
}
console.log(arr2);
posted @ 2022-08-24 22:57  KongQingzhi  阅读(93)  评论(0)    收藏  举报