前言:我們經常會遇到想要將一個對象為己所用,但又不能污染原對象的需求,這就涉及到了js對象的深拷貝。 比如說在VUE的子組件中,父組件傳過來的數據中若是有對象,而子組件需要用父組件的數據進行初始化并且有另做他用的需求。
常規深拷貝
function deepCopy(obj){let str,copyObj = obj.constructor === Array ? [] : {};if(typeof(obj) != 'object'){return;}else if(window.JSON){copyObj = JSON.parse(JSON.stringify(obj));}else{for(let i in obj){copyObj[i] = typeof(obj[i]) === 'object' ? deepCopy(obj[i]) : obj[i];}}return copyObj;
}
復制代碼
存在的問題:不能對特殊對象進行深拷貝【函數、日期對象、正則對象】,以及循環引用的問題。
對特殊對象的拷貝----結構化拷貝
結構化拷貝