ES6實現深拷貝的方法有多種,以下是其中一種常用的方法:
JSON.parse()
和JSON.stringify()
方法:function deepCopy(obj) {
return JSON.parse(JSON.stringify(obj));
}
該方法的原理是將對象先通過JSON.stringify()
方法轉為字符串,再通過JSON.parse()
方法轉為新的對象,從而實現深拷貝。但是需要注意的是,該方法無法拷貝函數、正則表達式、Date對象等特殊對象。
function deepCopy(obj) {
if (obj === null || typeof obj !== 'object') {
return obj;
}
let copy = Array.isArray(obj) ? [] : {};
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
copy[key] = deepCopy(obj[key]);
}
}
return copy;
}
該方法通過遞歸的方式實現深拷貝,對對象和數組進行遍歷,將每個屬性遞歸調用deepCopy
函數進行拷貝。這種方法能夠正確地拷貝函數、正則表達式、Date對象等特殊對象。
需要注意的是,上述方法在處理循環引用的情況下可能會導致棧溢出,因此在實際使用時需要注意避免循環引用的情況。