遞歸函數在深拷貝有用到數組
// - obj1和obj2必須都是對象才能使用 function copy (obj1, obj2) { for (var k in obj1) { // 根據屬性值得類型,須要進行不一樣的操做 if (typeof obj1[k] === 'object' && obj1[k] !== null) { // 若是對象的某個屬性值也是複雜數據類型,一樣須要進行遍歷拷貝操做 // 若是但願將obj1[k]的屬性拷貝給obj2[k],obj2[k]首先須要是一個對象 // obj2[k] = {}; // 先設置爲對象後,再將obj1[k]的屬性進行拷貝函數
// - 設置時須要考慮,數據究竟是數組仍是對象形式,再進行對應的建立
obj2[k] = obj1[k] instanceof Array ? [] : {};
copy(obj1[k], obj2[k]);
} else {
// 這種直接賦值的方式只適用於屬性值爲基本數據類型的狀況
obj2[k] = obj1[k];
}
}
}
copy(obj1, obj2);
/* obj1.aiHao.swim = '我喜歡蛙泳';
obj1.aiHao.eat.xiHongShi = '我喜歡吃西紅柿炒雞蛋'; */
console.log(obj1, obj2);複製代碼