CoreJavaScript_01.データ型(1)


これらの内容は「Core Javascript」の書籍を参考にして作成され、初心者開発者に有益な書籍を提供してくれた著者の池恩・鄭在南に感謝します.

データ型


種類



(出典:少年コードのJavaScriptチュートリアル)

  • 上図に示すように、直感的に2種類に分けられます.
  • ベーシック(オリジナル)
  • 参照型(参照型)
  • :2つの最大の違いは、割り当てまたは演算時に伝達される方法です.

    基本vsリファレンス


    まず、基本タイプは値を含むアドレスを渡します.
    次の参照タイプは、値を含むアドレスのセットのアドレスを渡します.
    改めて説明すると….
    デフォルトのタイプでは、データ値が指すアドレスに特定のコンテンツ(数値、文字など)が含まれます.
    参照型タイプとは、データ値が指すアドレスにアドレスのセットがあることを意味します.

    背景知識


  • クリーンアップ用語

  • ビット対バイト
    すべてのデータは0または1に変換され、メモリに格納されます.このメモリ単位はビットと呼ばれます.
    ここで、メモリ領域をより効率的に使用するために、ビットを組み合わせて作成された新しいメモリ単位をバイトと呼びます.
    (1byte = 8bit)

  • 変数vs識別子
    変数とは、データの宣言と割り当てに使用されるスペースです.
    「識別子」とは、データの各値に付与される名前、変数名を意味します.
  • 変数の宣言と割り当て


    変数の宣言と割り当てについては,書籍に例題や画像があり,参照学習によりよりより容易に理解できる.また,「変数領域」と「データ領域」の2つの用語は,いずれも筆者が自ら創造した概念である.
    let variable = 1;
    // 위 코드에서 변수 'variable' 와 데이터 '1' 값은 따로 변수영역, 데이터영역 메모리에 저장되고, 주소 또한 별도로 지정된다.
    
    variable = variable + 2;
    /* 다음 코드에서 기존 값에 "+2" 연산이 적용되어 데이터 '3'이 만들어지는데
    이때 데이터 '3' 또한 데이터영역에서 별도의 메모리 주소로 저장된다.*/

    不変値vs可変値

  • 変数に割り当てられたデータは、不変値と可変値に分けることができる.
    基本形は不変値ともいえるが,参照形は可変値ともいえる.
  • let primitive = 1;
    primitive = 2;
    /* 위에서 할당하는 'primitive' 변수의 값(1, 2)은 각각 다른 주소를 지닌 데이터를 받는다.
    이는 정확히 말하자면 해당 변수가 가리키는 주소가 변한 것이다.
    그렇기에 각각의 데이터가 지닌 주소 자체는 변함이 없다(불변값).*/
    
    let reference = {
      var1 = 1,
      var2 = 2,
    };
    
    reference.var1 = 3;
    /*다음 코드에서 변수 'reference' 안의 var1 의 값이 '1' 에서 '3'으로 바뀌었다.
    앞서 보았던 기본형과는 달리 참조형에서는 가리키는 주소가 바뀌지 않았는데, 데이터가 변한것이다(가변값).
    정확히 말하자면 'reference'의 값(주소) 는 변하지 않았지만, 
    변수 영역에 저장된 'var1'의 값(주소) 이 변한 것이다.*/
    通常、基本型と参照型の違いについて述べると、
    基本型はレプリケーション値を表し、参照型はレプリケーションアドレスを表します.
    これは,基本型が不変値の性質を持つためである.
    すなわち、基本型もアドレスをコピーしますが、参照型とは異なり、1つのステップしかかかりません.
    つまり、デフォルト値(アドレス)は別の値(アドレス)に接続されません.
    値がそのままコピーされているように理解できます.

    変数のコピー

  • 上記参照型の可変値特性を再確認することができる.
  • let obj1 = {
      a: 123,
      b: [1, 2, 3],
    };
    
    // 첫 번째 상황(변수 복사)
    let obj2 = obj1;
    
    
    // 두 번째 상황(똑같은 값을 할당)
    let obj2 = {
      a: 123,
      b: [1, 2, 3],
    };
    
    // 상황에 따라 아래 결과가 다르다.
    obj2.a = 345;
    
    console.log(obj1);
    console.log(obj2);
    // 첫 번째 상황에서는 obj1, obj2 둘다 'a' 값이 변한다.
    // 두 번째 상황에서는 obj2 변수에서만 'a' 값이 변한다.
  • 参照フォーマットはアドレスをコピーするので、対応するアドレスのデータ値が変化した場合、すべての変数(第1のケースの説明)に適用されます.
  • と識別子の名前が同じであることはメモリアドレスが同じであることを意味しないため、別々に割り当てられた場合、上記のデータ変換はグローバルには適用されない(第2のケースの説明).