一、深淺拷貝的定義:
1、對於簡單數據類型要實現深拷貝,用簡單的復制方法即可;
2、對於引用數據類型,若用簡單的復制語句,就只是復制了數據的地址,若源對象發生改變,那么復制的數據也會發生改變,這時就需要深淺拷貝來實現了;淺拷貝是針對一層的復制,即對象中的元素是基本數據類型;當對象的元素不是基本數據類型時,即多層,將用到深拷貝的方式;
二、手寫一個通用的拷貝函數
該函數對簡單數據類型和引用數據類型都能實現深拷貝
而對於引用數據類型的一層和多層都適用
function copyObj(obj){ var cloneObj; //當輸入數據為簡單數據類型時直接復制 if(obj&&typeof obj!=='object'){cloneObj=obj;} //當輸入數據為對象或數組時 else if(obj&&typeof obj==='object'){ //檢測輸入數據是數組還是對象 cloneObj=Array.isArray(obj)?[]:{}; for(let key in obj){ if(obj.hasOwnProperty(key)){ if(obj[key]&&typeof obj[key]==='object') { //若當前元素類型為對象時,遞歸調用 cloneObj[key] = copyObj(obj[key]); } //若當前元素類型為基本數據類型 else{cloneObj[key]=obj[key];} } } } return cloneObj; }