最近在研究js對象的深拷貝,下面是我試驗的兩種方法,一種是經過JSON.stringify和JSON.parse的方法實現的深拷貝,一種是經過遞歸函數實現的深拷貝。函數
此處有個問題,第二種方法實現了對象方法的拷貝,可是不是深拷貝,網上找了好久都沒有找到實現對象的方法深拷貝的方法,但願有大神能給點建議。code
let obj = { a: 1, b: '2', c: { c1: 1 }, d: function () { console.log('d'); }, e: [1, 2, 3] }; //使用JSON.parse和JSON.stringify的方法是深拷貝,除了function,其餘的都能拷貝 let obj_copy1 = JSON.parse(JSON.stringify(obj)); console.log(obj_copy1); console.log(obj.c === obj_copy1.c); //結果是false,對象是深拷貝 // 使用遞歸的方法複製,function能夠複製,除了function是淺拷貝,其餘的都是深拷貝 function clone(obj) { let new_obj = {}; for(let key in obj) { let t = ( typeof obj[key] ).toLowerCase(); if (t === 'object') { if(obj[key] instanceof Array) { var new_arr = []; for(let item of obj[key]) { new_arr.push(item); } new_obj[key] = new_arr; } else { new_obj[key] = clone(obj[key]); } } else { new_obj[key] = obj[key]; } } return new_obj; } let obj_copy2 = clone(obj); console.log(obj_copy2); console.log(obj.c === obj_copy2.c); //結果是false,對象是深拷貝 console.log(obj.d === obj_copy2.d); //結果是true,function不是深拷貝