<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>