🐤
【JavaScript】シャローコピーとディープコピー
シャローコピー(浅いコピー)
- シャローコピーを作成するには、スプレッド演算子などが使用できる
- これらの方法では、オブジェクトのトップレベルのプロパティのみがコピーされ、ネストされたオブジェクトは参照のまま
const original = {
number: 1,
nestedArray: [2, 3]
};
// シャローコピーを作成
const shallowCopy = { ...original };
// シャローコピーのネストされたオブジェクトを変更
shallowCopy.nestedArray[0] = 99;
console.log(original); // 出力: { number: 1, nestedArray: [99, 3] }
console.log(shallowCopy); // 出力: { number: 1, nestedArray: [99, 3] }
ディープコピー(深いコピー)
- ディープコピーを作成するには、オブジェクトを再帰的にコピーする必要がある
- JavaScriptでは、JSONメソッドを使用して簡単なディープコピーを作成できますが、この方法は関数やundefinedなどの特殊な値には対応していません。より複雑なオブジェクトには、ライブラリやカスタム関数を使用することがあります。
const original = {
number: 1,
nestedArray: [2, 3]
};
// ディープコピーを作成
const deepCopy = JSON.parse(JSON.stringify(original));
// ディープコピーのネストされたオブジェクトを変更
deepCopy.nestedArray[0] = 99;
console.log(original); // 出力: { number: 1, nestedArray: [2, 3] }
console.log(deepCopy); // 出力: { number: 1, nestedArray: [99, 3] }
Discussion