在 JavaScript 中,對(duì)象數(shù)組的拷貝涉及到深拷貝和淺拷貝的概念。下面簡要介紹這兩種拷貝方式:
1. 淺拷貝:
- 淺拷貝是指創(chuàng)建一個(gè)新的對(duì)象或數(shù)組,新對(duì)象的屬性值是對(duì)原始對(duì)象屬性的引用。也就是說,新對(duì)象和原始對(duì)象的某些屬性引用相同的內(nèi)存地址。
- 對(duì)于對(duì)象數(shù)組的淺拷貝,可以使用擴(kuò)展運(yùn)算符 `...` 或 `Array.from()` 方法。
const originalArray = [{ name: "John" }, { name: "Jane" }];
// 使用擴(kuò)展運(yùn)算符進(jìn)行淺拷貝
const shallowCopyArray1 = [...originalArray];
shallowCopyArray1[0].name = "Mike";
console.log(originalArray[0].name); // 輸出: Mike
// 使用 Array.from() 進(jìn)行淺拷貝
const shallowCopyArray2 = Array.from(originalArray);
shallowCopyArray2[1].name = "Lily";
console.log(originalArray[1].name); // 輸出: Lily
2. 深拷貝:
- 深拷貝是指創(chuàng)建一個(gè)全新的對(duì)象或數(shù)組,新對(duì)象和原始對(duì)象完全獨(dú)立,不存在屬性引用共享的情況。
- 對(duì)于對(duì)象數(shù)組的深拷貝,可以使用 JSON 序列化和反序列化方法,即 `JSON.stringify()` 和 `JSON.parse()`。
const originalArray = [{ name: "John" }, { name: "Jane" }];
// 使用 JSON 序列化和反序列化進(jìn)行深拷貝
const deepCopyArray = JSON.parse(JSON.stringify(originalArray));
deepCopyArray[0].name = "Mike";
console.log(originalArray[0].name); // 輸出: John
需要注意的是,使用 JSON 序列化和反序列化方法進(jìn)行深拷貝時(shí),有一些限制:
- 無法復(fù)制函數(shù)、正則表達(dá)式等特殊對(duì)象。
- 無法處理循環(huán)引用的情況。
如果需要處理更復(fù)雜的對(duì)象結(jié)構(gòu)或者遇到上述限制,可以考慮使用第三方庫(如 lodash 的 `cloneDeep` 方法)來實(shí)現(xiàn)更可靠的深拷貝。