ホームページ > ウェブフロントエンド > jsチュートリアル > JavaScript オブジェクトの参照とコピーを理解する - 簡単な説明

JavaScript オブジェクトの参照とコピーを理解する - 簡単な説明

Linda Hamilton
リリース: 2024-12-22 02:07:21
オリジナル
304 人が閲覧しました

Understand JavaScript Object References and Copying - Brief Explanation

JavaScript でオブジェクトを操作する場合、オブジェクト参照オブジェクトのコピー の違いを理解することが重要です。詳細な概要は次のとおりです:


オブジェクト参照

  1. オブジェクトは参照型です:
    • オブジェクトを変数に割り当てると、オブジェクト自体のコピーではなく、オブジェクトが保存されているメモリの場所への参照が割り当てられることになります。
    • 1 つの参照を通じてオブジェクトを変更すると、同じオブジェクトへのすべての参照に影響します。
   let obj1 = { name: "Alice" };
   let obj2 = obj1; // obj2 now references the same object as obj1
   obj2.name = "Bob";
   console.log(obj1.name); // Output: "Bob"
ログイン後にコピー
ログイン後にコピー
  1. 等価性チェック:
    • 2 つの変数は、内容が同一である場合ではなく、メモリ内の同じオブジェクトを参照する場合に等しいと見なされます。
   let a = { key: "value" };
   let b = { key: "value" };
   console.log(a === b); // Output: false (different references)
   let c = a;
   console.log(a === c); // Output: true (same reference)
ログイン後にコピー

オブジェクトのコピー

オブジェクトのコピーには、浅いコピー深いコピーの 2 つの主なタイプがあります。

1.浅いコピー

  • 浅いコピーでは新しいオブジェクトが作成されますが、最初のレベルのプロパティのみがコピーされます。ネストされたオブジェクトまたは配列は、複製されずに引き続き参照されます。

浅いコピーのテクニック:

  • Object.assign():

     let original = { name: "Alice", details: { age: 25 } };
     let copy = Object.assign({}, original);
     copy.details.age = 30;
     console.log(original.details.age); // Output: 30 (shared reference)
    
    ログイン後にコピー
  • 拡散演算子 (...):

     let original = { name: "Alice", details: { age: 25 } };
     let copy = { ...original };
     copy.details.age = 30;
     console.log(original.details.age); // Output: 30 (shared reference)
    
    ログイン後にコピー
  • どちらのメソッドも浅いコピーを作成します。つまり、ネストされたオブジェクトは引き続きリンクされます。

2.ディープコピー

  • ディープ コピーは、ネストされた構造を含むオブジェクト全体を複製します。新しいオブジェクトは元のオブジェクトから完全に独立しています。

ディープコピーのテクニック:

  • JSON.parse() および JSON.stringify():

     let original = { name: "Alice", details: { age: 25 } };
     let copy = JSON.parse(JSON.stringify(original));
     copy.details.age = 30;
     console.log(original.details.age); // Output: 25
    
    ログイン後にコピー
    • 制限事項: このメソッドは、関数、未定義、Infinity、または Date や RegExp などの特殊なオブジェクトを処理しません。
  • StructuredClone() (モダン JavaScript):

     let original = { name: "Alice", details: { age: 25 } };
     let copy = structuredClone(original);
     copy.details.age = 30;
     console.log(original.details.age); // Output: 25
    
    ログイン後にコピー
    • このメソッドは、ほとんどのエッジケース (循環参照など) を処理しますが、古い環境ではサポートされていません。
  • カスタム ライブラリ:

    • lodash のようなライブラリを使用します。
       let obj1 = { name: "Alice" };
       let obj2 = obj1; // obj2 now references the same object as obj1
       obj2.name = "Bob";
       console.log(obj1.name); // Output: "Bob"
    
    ログイン後にコピー
    ログイン後にコピー

概要表

Action Result
Assignment (=) Creates a reference. Changes to one variable affect the other.
Shallow Copy Creates a new object but retains references for nested objects.
Deep Copy Creates a completely independent object, including nested structures.
アクション

結果

割り当て (=) 参照を作成します。一方の変数を変更すると、もう一方の変数にも影響します。 浅いコピー 新しいオブジェクトを作成しますが、ネストされたオブジェクトの参照は保持します。 ディープコピー ネストされた構造を含む、完全に独立したオブジェクトを作成します。
これらの概念を理解すると、JavaScript でオブジェクトを操作するときに予期しない副作用を回避できます!

以上がJavaScript オブジェクトの参照とコピーを理解する - 簡単な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート