Premitive&Reference(元の値と参照値)


🧵 データ型別に分類

  • String
  • Boolean
  • Number
  • Null
  • Undefined
  • Object
  • Symbol
  • 🧵 動作原理による分類

  • Primitive
  • Reference
  • 💍 Premitive


    初期

    🏐 同じ値の場合は同じです

    const string1 = "string";
    const string2 = "string";
    
    const result = string1 === string2;
    
    console.log(result); // ?
    StringはPrimitive(元の値)です.
    元の値の形状が同じであれば、同じ値で簡単に判別します.

    🏐 指定した値はそのままです

    let a = 10;
    const b = a;
    
    a = 30;
    
    console.log(b); // 10
    aが10の場合、bに1回値が割り当てられるため、aの値が変化するが、aを再割り当てしない場合、bは変わらない.

    💎 Reference


    (参照)データ型
  • Object
  • (Array, Function)
  • 🏐 変数作成プロセス

    const a = { id: '1', count: 0};
    const b = { id: '2', count: 0};
    const c = b;
  • メモリにオブジェクトを作成する
  • オブジェクトの参照値は、変数aの
  • に割り当てる.
    同じbオブジェクト
  • および
  • を作成および割り当てます.
  • b変数の参照値をc変数にコピーし、
  • を割り当てる.
    b変数とc変数は同じ参照値を持つため、同じオブジェクトを指す.

    🏐 同じ参照値がある場合は、同じ変更値が適用されます。

    const a = { id: '1', count: 0};
    const b = { id: '2', count: 0};
    const c = b;
    b.count = 1;
    console.log(b,c);
    //{ id: '2', count: 1}
    //{ id: '2', count: 1}
    bとcは同じ参照値であるため、変更後の値は受け入れられる.

    🏐 参照値が異なる場合は、同じように見える場合でも、異なる値として識別されます。

    const list1 = [1, 2, 3];
    const list2 = [1, 2, 3];
    
    const result = list1 === list2;
    
    console.log(result); // false

    🏐 同じ参照値がある場合は、同じ変更が適用されます。

    const ref1 = {
      num: 10,
    };
    const ref2 = ref1;
    
    ref1.num = 20;
    
    console.log(ref2); // 20
    ref 1とref 1の参照値は同じです.
    ref 1のnum値を変更すると、ref 2の参照値ref 1のnumも
    変更後の値は20で、適用範囲は同じです.

    🏐 配列内のオブジェクト-浅いコピー(展開オペレータ)

    const arr = [
      {id: '1', count: 0},
      {id: '2', count: 0},
    ];
    
    const arr2 = arr;
    const arr3 = [...arr];

  • 作成されたオブジェクトは3つあります.
    2個の
  • オブジェクト+1個のアレイ自体のオブジェクト

  • arr 2はarrと同じ参照値を有する.

  • arr 3はSpread Operatorを使用して浅いレプリケーションを行うため、新しい配列が作成され、新しい参照値が割り当てられます.

  • ただし、配列内のオブジェクトは同じ参照値をコピーします.

  • したがって、オブジェクトが変更されると、arr、arr 2、arr 3に変更が表示されます.

  • しかしarr 2とは異なりarr 3ではアレイに新しいオブジェクトが追加されてもそれらは見えない.配列オブジェクトの参照値が異なるためです.