JavaScript: Deep copy là gì ?

In JavaScript, standard built-in object-copy operations (spread syntax, Array.prototype.concat(), Array.prototype.slice(), Array.from(), Object.assign(), and Object.create()) do not create deep copies (instead, they create shallow copies).

Deep copy của một đối tượng là một bản sao có các thuộc tính không chia sẻ cùng các tham chiếu (trỏ đến cùng các giá trị cơ bản) với các thuộc tính của đối tượng nguồn mà từ đó bản sao được tạo ra.

Do đó, khi bạn thay đổi nguồn hoặc bản sao, bạn có thể yên tâm rằng mình sẽ không làm cho đối tượng khác thay đổi; nghĩa là, bạn sẽ không vô tình gây ra các thay đổi đối với nguồn hoặc bản sao mà bạn không mong đợi.

Hành vi đó trái ngược với hành vi của một bản sao cạn, trong đó các thay đổi đối với nguồn hoặc bản sao cũng có thể khiến đối tượng khác cũng thay đổi (vì hai đối tượng chia sẻ cùng một tham chiếu).

Một cách để tạo bản sao sâu của đối tượng JavaScript, nếu nó có thể được tuần tự hóa, là sử dụng JSON.stringify () để chuyển đổi đối tượng thành chuỗi JSON và sau đó JSON.parse () để chuyển đổi chuỗi trở lại thành ( hoàn toàn mới) Đối tượng JavaScript:

let ingredients_list = ["noodles",{"list":["eggs","flour","water"]}];
let ingredients_list_deepcopy = JSON.parse(JSON.stringify(ingredients_list));

// Change the value of the 'list' property in ingredients_list_deepcopy.
ingredients_list_deepcopy[1].list = ["rice flour","water"]
// The 'list' property does not change in ingredients_list.
console.log(ingredients_list[1].list);
// Array(3) [ "eggs", "flour", "water" ]

Readmore: https://developer.mozilla.org/en-US/docs/Glossary/Deep_copy