🐤

【JavaScript】シャローコピーとディープコピー

2024/09/14に公開

シャローコピー(浅いコピー)

  • シャローコピーを作成するには、スプレッド演算子などが使用できる
  • これらの方法では、オブジェクトのトップレベルのプロパティのみがコピーされ、ネストされたオブジェクトは参照のまま
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