【JavaScript】Shallow copy(シャローコピー)

  • このエントリーをはてなブックマークに追加

–mdn ここから–
オブジェクトのシャローコピーとは、コピーがコピー元のオブジェクトとプロパティにおいて同じ参照を共有する(同じ基礎値を指す)コピーのことを指します。その結果、コピー元とコピー先のどちらかを変更すると、もう一方のオブジェクトも変更される可能性があります。そのため、意図せずにコピー元やコピー先に予期しない変更が発生してしまう可能性があります。この挙動は、ソースとコピーが完全に独立しているディープコピーの挙動とは対照的です。

シャローコピーでは、オブジェクトの既存の要素にある共有プロパティの値を選択的に変更することは、既存の要素に完全に新しい値を割り当てることとは異なるということを理解することが重要です。

JavaScript では、すべての標準組込みオブジェクトのコピー操作(スプレッド構文, Array.prototype.concat(), Array.prototype.slice(), Array.from(), Object.assign(), Object.create())において、ディープコピーではなくシャローコピーを生成します。
–mdn ここまで–



シャローコピーは、オブジェクトの場合にそのオブジェクトへの参照(アドレス)がコピーされるため、オブジェクトの中身自体はコピーされず、元のオブジェクトとコピー先のオブジェクトが同じオブジェクトを参照することになる。一方で、数値や文字列などのプリミティブ型の場合は、その値自体がコピーされる。

オブジェクトが関数を含まない場合で、プロパティがプリミティブ型(数値や文字列など)だけであれば、シャローコピーとディープコピーの動作は同じになる。これはプリミティブ型のプロパティはその値そのものを保持しているため、シャローコピーを実施してもコピー先の変更が元のオブジェクトに影響を与えないからである。

オブジェクトのコピー元とコピー先が完全に独立しているものをDeep copy(ディープコピー)という。
Deep copy(ディープコピー)の反対がShallow copy(シャローコピー)である。

Shallow copy (シャローコピー) – MDN Web Docs 用語集: ウェブ関連用語の定義 | MDN (mozilla.org)

  • このエントリーをはてなブックマークに追加

SNSでもご購読できます。

コメントを残す

*