JavaScrip-引用数据类型的深浅拷贝
程序员文章站
2024-03-23 10:06:10
...
简单数据类型的赋值:
var str1='haha'
var str2;
str2=str1;
str1='xixi';
console.log(str1);
console.log(str2);
这里控制台的输出结果是
很明显,将str1的值赋给str2之后,如果再对str1的值做出改变的话,对str2的值没有影响,因为这里进行的是将str1变量的值赋给str2。
接下来我们来看引用数据类型的赋值操作:
var arr1=[1,2,3,4,5,6,7];
var arr2;
arr2=arr1;
arr1[2]=9;
console.log(arr1);
console.log(arr2);
我们来看这里控制台输出的结果是
这里我们对一个数组进行数据单元的改变,结果两个数组的内容都改变了。因为这里执行的arr2=arr1,是将arr1内存地址赋值给了arr2,两个变量储存的是相同的内存地址,也就是他们两操作的是同一个数组。这里我们进行的将一个变量的内存地址直接赋值给另一个变量存储的就是浅拷贝。
如果不想两个变量操作一个数组的话,我们可以只赋值引用数据变量的数值,而不是地址,这种赋值我们称为深拷贝
var arr3=['把','糖','都','给','你','吃','嘻']
var arr4=[];
arr3.forEach(function(val,key){
// arr4[key]=val;
arr4.push(val);
})
arr3[6]='啵';
console.log(arr3);
console.log(arr4);
我们循环遍历数组,将数组的数据单元一个一个取出来赋值给另一个数组对应的数据单元(或者加到另一个数组中),然后就实现了赋值数值的操作,我们看一下执行结果:
可以看出来对arr3值的改变并不会影响arr4,我们就实现了对arr3的深拷贝。