<script>
var arr1 = [1,2,3,{a:4}];
var arr2 = [];
//浅拷贝
function shallowCopy(a1, a2){
a2 = a1;
}
//普通元素为深拷贝,对象为浅拷贝
function copy(a1, a2){
//a2 = a1.slice();//第一种
//a2 = a1.concat();//第二种
//a2 = [...a1];//第三种
a2 = Array.from(a1);;//第四种
}
//深拷贝
function deepCopy(a1, a2){
// 取出第一个对象的每一个属性
for(var key in a1){
// 取出第一个对象当前属性对应的值
var item = a1[key];
// 判断当前的值是否是引用类型
// 如果是引用类型, 我们就重新开辟一块存储空间
if(item instanceof Object){
var temp = new Object();
deepCopy(item, temp); //递归
a2[key] = temp;
}else{
// 基本数据类型
a2[key] = a1[key];
}
}
}
// shallowCopy(arr1,arr2);//浅拷贝
// copy(arr1,arr2);
deepCopy(arr1,arr2);//深拷贝
arr1[0] = 9;
arr1[3].a = 10;
console.log(arr1); //[9,2,3,{a:10}];
console.log(arr2); //[1,2,3,{a:4}];
</script>