【しゃろーこぴー】
シャローコピー(浅いコピー) とは?
最終更新:
💡 外側は別、内側のオブジェクトは一緒
コピー先の外側は新しく作り、そこから参照する内部のオブジェクトは共有するコピー方法。JavaScriptの通常のオブジェクトや配列で具体例を説明する。
📌 このページのポイント
同じデータを別の変数に入れれば、コピーになる?
JavaScriptのオブジェクトで const b = a とすると、aとbは同じオブジェクトを指すよ。通常のオブジェクトなら const copy = {...a} として、別の外側を作れる。これが浅いコピーの一例だね。
外側は別なのに、中身は変わるの?
たとえば original = {count: 1, user: {name: "Ken"}} をスプレッドでコピーする。copy.count = 2 としても元のcountは1のまま。でも copy.user.name = "Tom" とすると、共有しているuserを変えるので元のnameもTomになるんだ。
配列なら安心?
Reactの状態を変えるときは?
元の状態を直接書き換えず、変更する部分から外側まで新しく作るよ。たとえばuserのnameを変えるなら、userとそれを持つ外側の両方をコピーする。全部を深くコピーする必要はなく、Immerで更新の記述を短くする方法もあるよ。
structuredCloneなら、何でも深くコピーできる?
まとめ:ざっくりこれだけ覚えればOK!
「シャローコピー」って出てきたら「外側をコピーして、内部のオブジェクトは共有する浅いコピー」と思えばだいたいOK!
📖 おまけ:英語の意味
「shallow copy」 = 浅いコピー
💬 shallowは「浅い」。外側を複製しても、内部のオブジェクトへの参照までは独立させないコピーを表すよ。