ディープコピーとは
ディープコピーとは、オブジェクトのすべてのレベルのプロパティを再帰的にコピーすることを言います。シャローコピーと違いはコピー元とコピー先が完全に独立することです。
ディープコピーをする方法
JSON.parse()とJSON.stringify()を使った方法がシンプルでわかりやすいです。
const person = {
name: 'Takuto',
gender: '男',
info: {
age: 20,
interests: 'reading',
},
};
const copy = JSON.parse(JSON.stringify(person)); //ディープコピー
copy.name = 'Kazuya';
copy.info.age = 21;
console.log(person.name); //Takuto 変更されない
console.log(person.info.age); //20 変更されない
メモ
この方法では...
・関数や特殊なオブジェクト(Date, Set, Mapなど)はコピーできない。
・循環参照(オブジェクトが自身を参照する構造)に対応できない。
追記
structuredCloneメソッドを用いてもディープコピーを簡単に行えます。
この方法だと特殊なオブジェクト(Date, Set, Mapなど)のコピーも可能です。
先ほどの例でディープコピーの行をこのようにしても同じ結果になります。
const copy = structuredClone(person); //ディープコピー