JavaScript でオブジェクトや配列を操作する場合、データ構造のコピーを作成するのが一般的なタスクです。ただし、開発者は、浅いコピーと深いコピーのどちらを使用するかを決定する際に、多くの場合課題に直面します。違いを誤解すると、コードに意図しない副作用が生じる可能性があります。これらの概念、その違い、それぞれをいつ使用するかについて詳しく見ていきましょう。
? 電子ブックをダウンロード - JavaScript: ES2015 から ES2023 まで
浅いコピーは、元のオブジェクトの最上位プロパティのコピーを使用して新しいオブジェクトを作成します。プリミティブであるプロパティ (数値、文字列、ブール値など) の場合、値自体がコピーされます。ただし、オブジェクトであるプロパティ (配列やネストされたオブジェクトなど) の場合、参照のみがコピーされ、実際のデータはコピーされません。
これは、新しいオブジェクトには最上位プロパティの独自のコピーがありますが、ネストされたオブジェクトまたは配列は元のオブジェクトとコピーの間で共有されたままであることを意味します。
const original = { name: "Alice", details: { age: 25, city: "Wonderland" } }; // Shallow copy const shallowCopy = { ...original }; // Modify the nested object in the shallow copy shallowCopy.details.city = "Looking Glass"; // Original object is also affected console.log(original.details.city); // Output: "Looking Glass"
const shallowCopy = { ...originalObject };
const shallowCopy = Object.assign({}, originalObject);
これらのメソッドは高速で簡単ですが、深くネストされたオブジェクトには適していません。
ディープ コピーは、元のオブジェクトのすべてのプロパティとサブプロパティを複製します。これにより、コピーがオリジナルから完全に独立し、コピーへの変更が元のオブジェクトに影響を与えないことが保証されます。
ディープ コピーは、ネストされたオブジェクトや配列などの複雑なデータ構造を扱う場合、特にデータの整合性が重要なシナリオでは不可欠です。
const original = { name: "Alice", details: { age: 25, city: "Wonderland" } }; // Shallow copy const shallowCopy = { ...original }; // Modify the nested object in the shallow copy shallowCopy.details.city = "Looking Glass"; // Original object is also affected console.log(original.details.city); // Output: "Looking Glass"
const shallowCopy = { ...originalObject };
const shallowCopy = Object.assign({}, originalObject);
Feature | Shallow Copy | Deep Copy |
---|---|---|
Scope | Copies only top-level properties. | Copies all levels, including nested data. |
References | Nested references are shared. | Nested references are independent. |
Performance | Faster and lightweight. | Slower due to recursive operations. |
Use Cases | Flat or minimally nested objects. | Deeply nested objects or immutable structures. |
ユーザーの設定オブジェクトをコピーして簡単に調整する:
const original = { name: "Alice", details: { age: 25, city: "Wonderland" } }; // Shallow copy const shallowCopy = { ...original }; // Modify the nested object in the shallow copy shallowCopy.details.city = "Looking Glass"; // Original object is also affected console.log(original.details.city); // Output: "Looking Glass"
ゲームまたはアプリケーションの状態の複製:
const shallowCopy = { ...originalObject };
浅いコピーが常に十分であると仮定する:
JSON メソッドの過剰使用:
パフォーマンスの無視:
シャロー コピーとディープ コピーの違いを理解することは、バグのない JavaScript コードを作成するために不可欠です。浅いコピーはフラットな構造では効率的ですが、深いコピーは複雑なネストされたオブジェクトには不可欠です。データ構造とアプリケーションのニーズに基づいて適切な方法を選択し、各アプローチの制限を理解して潜在的な落とし穴を回避してください。
? 電子ブックをダウンロード - JavaScript: ES2015 から ES2023 まで
以上がJavaScript のシャロー コピーとディープ コピー: 例とベスト プラクティスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。