前言:我們經常會遇到想要將一個物件為己所用,但又不能汙染原物件的需求,這就涉及到了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;
}
複製程式碼
存在的問題:不能對特殊物件進行深拷貝【函式、日期物件、正則物件】,以及迴圈引用的問題。