淺拷貝:也就是在對象複製時,只是對對象中的數據成員進行簡單的賦值,如果對象中存在動態成員,即指針,淺拷貝就會出現問題。
深拷貝:對於深拷貝,針對成員變量存在指針的情況,不僅僅是簡單的指針賦值,而是重新分配內存空間。
1.ES6實現淺拷貝: Object.assign()
e.g. Object.assign({a:1},{a:2,b:3})
輸出結果{a: 2, b: 3}
2.js實現淺拷貝
function shallowClone(source) { if(!source || typeof source!=Object){ return new Error('error'); } var targetObj=source.constructor()===Array?[]:{}; for(var keys in source){ if(source.hasOwnProperty(keys)){ targetObj[keys]=source[keys]; } } return targetObj; }
3.js實現深拷貝
function cloneDeep(obj){ if(typeof obj !== 'object' || Object.keys(obj).length === 0 ){ return obj; } let resultData = {}; return recurison(obj, resultData); } function recurison(obj, data = {}){ for(key in obj){ if(typeof obj[key] == 'object' && Object.keys(obj[key].length > 0 )){ data[key] = recurison(obj[key]); }else{ data[key] = obj[key]; } } return data; }