如何在 JavaScript 中克隆物件?


一個物件指的是具有屬性和型別的實體。例如,將一個視為一個物件,它具有身高、體重、年齡薪水等屬性。同樣,JavaScript 也具有物件及其定義的屬性。

JavaScript 中的物件是一種複雜的資料型別,它可以儲存各種資料型別。讓我們考慮下面的示例

const employee = {
   name : ‘Dhoni’,
   age : 41,
   height : 5.8,
}

使用 JavaScript 克隆物件

一般來說,“克隆”定義為建立具有相同屬性的原始物件的副本。這些 JavaScript 物件藉助引用儲存在記憶體中。在記憶體中,兩個變數可以指向同一個物件。如果我們嘗試修改一個物件變數,則會影響其他變數。

const copyemp = employee;
console.log(copyemp);

在上述情況下,我們不能簡單地這樣克隆物件,原因是employee是一個物件。

copyemp.name = ‘Kohli’;
copyemp.age = 34;
Console.log(copyemp.name); // Kohli
Console.log(employee.name); //Kohli

在上述情況下,copyemp 的變數與employee 物件的值相同。由於此處未設定目標,因此對copyemp 物件值所做的更改也已應用於employee 物件。

我們看到了兩個物件的變化,因為 copyemp 和 employee 指向同一個物件。

物件的克隆可以透過以下幾種方式完成:

  • 使用 object.assign()。
  • 使用展開語法。
  • 遍歷每個屬性並將它們複製到新物件。

使用 Object.assign()

JavaScript 的“Object.assign()”方法將建立一個包含原始物件所有屬性的副本物件並返回它。要實現此方法,需要遵循以下步驟。

如果我們使用 Object.assign() 來克隆物件。

  • 宣告一個物件,將其視為父物件

  • 為父物件分配屬性

  • 建立克隆物件並使用Object.assign() 為其賦值。

示例

在這個示例中,我們使用了Object.assign() 方法。結合stringify(),我們可以獲取 JSON 物件的內容:

<!DOCTYPE html> <html> <head> <script> const employee = { name: 'Dhoni', age: 41, role: 'Manager', salary: 80000, } const copyemp = Object.assign({}, employee); document.write(JSON.stringify(copyemp), "<br>"); copyemp.name = 'Kohli'; copyemp.age = 34; document.write(JSON.stringify(copyemp.name), "<br>"); document.write(JSON.stringify(copyemp.age), "<br>"); document.write(JSON.stringify(employee.name), "<br>"); document.write(JSON.stringify(employee.age)); </script> </head> </html>

輸出

上述指令碼的輸出將是:

{ name: 'Dhoni', age: 41, role: 'Manager', salary: 80000 }
“Kohli”
34
“Dhoni”
41

使用展開語法 (…)

“展開”運算子有效地將物件或陣列的所有屬性複製到新的物件或陣列中。要實現此方法,我們需要遵循以下步驟:

如果我們使用 (…) 語法來克隆物件。

  • 宣告一個物件,將其視為父物件

  • 為父物件分配屬性

  • 建立克隆物件並使用{…父物件} 為其賦值。

示例

在這個示例中,我們使用了“展開語法” (…)。此展開語法也用於從父物件複製屬性。

<!DOCTYPE html> <html> <head> <script> const employee = { name: 'Dhoni', age: 41, role: 'Manager', salary: 80000, } // cloning the object const copyemp = { ... employee} document.write(JSON.stringify(copyemp), "<br>"); // modifying the value of copyemp copyemp.name = 'Peter'; copyemp.age = 34; document.write(JSON.stringify(copyemp.name), "<br>"); document.write(JSON.stringify(copyemp.age), "<br>"); document.write(JSON.stringify(employee.name), "<br>"); document.write(JSON.stringify(employee.age)); </script> </head> </html>

輸出

上述指令碼的輸出將是:

{"name":"Dhoni","age":41,"role":"Manager","salary":80000}
"Peter"
34
"Dhoni"
41

使用 JSON.parse()

JavaScript 方法 JSON.parse() 將 JSON 字串轉換為物件。如果傳遞給 JSON.parse() 的字串包含任何尾隨逗號,則該字串將失敗,因為它們在 JSON 中是無效的。要實現此方法,需要遵循以下步驟。

如果我們使用 JSON.parse() 語法來克隆物件。

  • 宣告一個物件,將其視為父物件

  • 為父物件分配屬性

  • 建立克隆物件並使用 JSON.parse() 為其賦值。

JSON.parse() 中,如果物件文字包含函式符號屬性,則它不會執行物件的克隆工作。這隻在物件文字包含數字和字串時才有效。

示例

在這個示例中,我們使用的是JSON.parse() 方法,它將複製現有物件的屬性。

<!DOCTYPE html> <html> <head> <script> const employee = { name: 'Dhoni', age: 41, role: 'Manager', salary: 80000, } // cloning the object const copyemp = JSON.parse(JSON.stringify(employee)); document.write(JSON.stringify(copyemp), "<br>"); // modifying the value of copyemp copyemp.name = 'Peter'; copyemp.age = 34; document.write(JSON.stringify(copyemp.name), "<br>"); document.write(JSON.stringify(copyemp.age), "<br>"); document.write(JSON.stringify(employee.name), "<br>"); </script> </head> </html>

輸出

上述指令碼的輸出將是:

{"name":"Dhoni","age":41,"role":"Manager","salary":80000}
"Peter"
34
"Dhoni"

更新於:2022年11月18日

5K+ 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告