[JavaScript]データ型のタイプ


データ型のタイプ
JavaScriptのデータ型は大きく2種類あります.
1.元のタイプ(primitive type)
1. 숫자(number)
2. 문자열(string)
3. 불리언(boolean)
4. null
5. undefined
6. 심볼(symbol)
  • アサイメントまたは計算時コピー
  • の値を含むアドレス値
  • をコピーする.
    一定に保つ
    2.参照タイプ
    1. 객체(Object)
    2. 배열(Array)
    3. 함수(Funtion)
    4. 날짜(Date)
    5. 정규표현식(RegExp)
    6. Map, WeakMap, Set, WeakSet...
  • 割当または参照演算子
  • コピーアドレス値
  • 背景知識
    メモリとデータ
    コンピュータはすべてのデータを0または1に変換して記憶し、0または1しか表さないメモリセグメントをビット(bit)と呼ぶ.メモリは複数のビットで構成され、各ビットは一意の識別子(unique identifer)によって位置を決定することができる.しかし,ビット単位で位置を決定することは非常に非効率である.したがって,表示可能なデータ数も増加し,検索時間も減少し(8ビットからなる),すべてのデータをバイト単位のメモリアドレス値(memory address)で区別・接続できるようになった.
    識別子と変数
  • 変数は「可変データ」です.
  • 識別子(idntifier)は、データを識別するための名前、すなわち変数名である.
  • 変数宣言とデータ割当て
    変数の宣言
    var a;
    // 메모리에 식별자 a를 검색 후 없으면 메모리의 빈 공간을 확보하여 그 공간의 식별자를 a로 지정
    変数は、可変データを含むことができる空間またはコンテナです.上記のコマンドを実行すると、メモリ内の空き領域を検索し、識別子をaとして指定します.これを変数宣言と呼びます.その後、ユーザがaにアクセスしようとすると、aという名前のアドレスが検索され、空間内のデータが返される.
    データわりあて
    var a = 'abc';
    // 메모리에 'abc' 저장 후 그 주소값을 식별자 a의 데이터에 연결
    割り当ての場合、aという名前のアドレスが検索され、文字列「abc」が割り当てられる場合がありますが、実際にはそうではありません.データを割り当てると、文字列「abc」を格納し、変数領域にアドレスを格納する追加のメモリ領域が保持されます.これは、データを自由に変換し、メモリを効率的に管理するためです.これは、予め定められた空間内でしかデータを変換できない場合、より大きなデータが入ると、データサイズに応じて空間を増やさなければならず、メモリの真ん中にデータがある場合は、後で格納されたデータをすべて移動し、移動したアドレスを識別子に再接続しなければならないため、非常に非効率である.
    a = 'abcdef'; 
    // 메모리에 'adcdef' 저장 후 그 주소값을 식별자 a의 데이터에 연결
    var b = 1;
    // 메모리에 1 저장 후 그 주소값을 식별자 b의 데이터에 연결
    var c = 1;
    // b에서 사용된 1의 주소값을 식별자 c에 연결
    変数に新しいデータを割り当てると、既存のデータストレージスペースに新しいデータを割り当てるのではなく、新しいデータが新しいデータストレージスペースに格納され、そのアドレスが識別子に関連付けられます.ただし、1つのデータを複数の変数に割り当てる場合は、1つの空間に1回のデータを割り当ててからアドレス値を再利用するだけです.
    基本データと参照データ
  • 変数(変数)と定数(定数)を区別する性質は、「変数領域メモリの変更可能性」です.
  • の不変性を区別する性質は「データ領域メモリの変更可能性」である.
  • 不変値
    var a = 'abc';
    a = a + 'def';
    基本データはすべて不変値です.上記のコマンドを実行すると、既存のabcをabcdefに変更するのではなく、defをabcに追加し、新しい文字列データを作成し、そのアドレスを変数aに格納します.このようにして一度の価格は変えることができなくて、ごみに収集されない限り、永遠に変えません.
    可変値
    var obj = {
      a: 1,
      b: 'b'
    };
    
    obj.a = 2; // 객체의 주소값이 바뀌는게 아니라 변수 a의 주소값이 바뀜
    参照型データの基本的性質は通常可変値であるが、設定に従って不変値として用いるスキームもある.参照型はオブジェクトの変数領域とは独立しており、データ領域は既存のメモリ領域を利用している.データ領域に格納されている値は変更されませんが、可変値と呼ばれる変数に他の値を代入できます.
    レプリケーション変数の比較
    //기본형
    var a = 10;
    var b = a;
    
    //참조형
    var obj = { c: 10, d: 'ddd' };
    var obj2 = obj;
    きほんデータ
    変数領域の空白を取得した後、識別子をaとして指定します.データ領域で検索しても数字10がない場合は、空白領域にデータ10を格納し、データのアドレス値を変数に格納します.次に、コピーのために、変数領域の空き領域を見つけ、識別子をbとして指定し、識別子aを検索し、10を含むデータアドレスをbの変数領域データに格納する.
    リファレンスデータ
    変数領域の空きスペースを取得した後、識別子をobj、c、dとして指定します.次のデータ領域では、オブジェクトのデータとオブジェクト内の変数のデータが空間的に保持されると、オブジェクトは変数のアドレス値を変数のアドレス値に置き換えます.cを代入する10は、データの領域に存在するため、対応するアドレス値を代入する.その後のレプリケーションプロセスは、基本データと同様に、変数領域に空き領域を残した後、識別子をobj 2と指定し、識別子objを検索してその値を代入する.
    変数をコピーして値を変更
    //기본형
    var a = 10;
    var b = a;
    
    b = 15;
    
    //참조형
    var obj = { c: 10, d: 'ddd' };
    var obj2 = obj;
    
    obj.c = 20;
    きほんがた
    データ領域に15がないため、新しい空間が保持され格納され、変数領域で識別子bのアドレスが検索され、値が15のアドレス値に変更されます.
    参照タイプ
    データ領域には20がないため、新しい空間を保持して記憶した後に記憶する.以降の変数領域でobj 2を検索し、値を含むアドレスを検索し、値の変数領域で識別子cを検索し、20を含むアドレス値を代入する.
    n/a.結論
    基本データは、変数をコピーした後、コピー変数の値を変更すると、コピー変数の値が変更され、元の値は変更されませんが、参照データは同じオブジェクトを直接表示し続け、コピー変数の値を変更すると元の値も変更されます.
    var obj = { c: 10, d: 'ddd' };
    var obj2 = obj;
    
    obj2 = { c: 20, d: 'ddd'};
    ただし、上記のように、obj 2に新しいオブジェクトを割り当てると、直接値が変更され、データ領域の新しい空間にオブジェクトが格納され、そのアドレスが変数obj 2の値に格納され、オブジェクトへの変更であってもojb obj 2の値が変化する.参照型データは基本的に可変値ですが、上記のように不変値に変換することもできます.
    不変オブジェクト
    不変オブジェクト(immutable object)は最近のReact,Veruである.jsなどのライブラリやフレームワーク、関数式プログラミングなどの面で非常に重要な基礎概念である.参照型データの「可変性」は、Propertyを変更する場合にのみ成立しますが、データ自体を変更すると、基本型データと同様に「不変性」が成立します.
    浅い放射
    const obj = { 1: 'a' }
    const newObj = obj;
    
    newObj.1 = 'b';
    
    console.log(obj.1); // 'b'
    console.log(obj === newObj); // true
    浅いコピー(浅いコピー)は、次の値のみをコピーする方法です.参照データが格納されているPropertyをコピーするときはアドレス値のみがコピーされるため、元のデータとコピーが同じ参照データを指してコピーを置き換えると、元のデータが置き換えられ、逆も同様です.
    ふかほうしゃ
    深度コピー(deepcopy)は、内部のすべての値を1つずつ検索してすべてコピーする方法です.オブジェクトをコピーすると、そのオブジェクトの内部のすべての値がコピーされ、完全に新しいデータが作成されます.したがって、どちらの構成を変更しても他方には影響しません.
    未定義とnull
    JavaScriptには「なし」を表す2つの値があります.未定義と空です.意味は同じように見えるが、細かく異なり、使用目的も異なる.
    undefined
    変数
  • 未付与
  • オブジェクト内部に存在しないプロパティにアクセスしようとすると、
  • 文または呼び出されていない関数の実行結果を返さない
  • Undefinedはユーザによって明示的に指定できますが、値が存在しない場合にJavaScriptエンジンによって自動的に付与されます.
    明確に指定する.
    それ自体が値段です.空を表しますが、値としてpropertyまたは配列内の要素には一意のキー値(property名)が存在し、精製されたオブジェクトになります.
    値は存在しません.
    JavaScriptエンジンが返すundefindeは、その構成または配列のキー値(インデックス)自体が存在しないことを示します.
    arr = []
    arr.length = 3
    console.log(arr) // [empty x 3]
    ただし、空の配列には空の要素が含まれています.空の要素はundefinedと出力結果から異なり、順序依存配列方法(map、filter、forEach...)で巡回オブジェクトから除外されます.配列もオブジェクトなので、存在しないプログラムで巡回することはできません.配列は、特定のインデックスに値を指定すると、空白が保持され、長さの割合で空白が保持されるのではなく、インデックス名、データ・アドレス値が格納されます.
    null
    var n - null;
    console.log(typeof n); // object
    
    console.log(n == undefined) // true
    console.log(n == null) // true
      
    console.log(n === undefined) // false
    console.log(n === null) // true
    undefinedを指定してユーザーが空であることを明示的に表すことができますが、JavaScriptエンジンが返すundefinedと混乱を招く可能性があります.したがって、nullを明示的に表す場合はnullを使用します.nullのタイプはobjectであることに注意してください.したがって、変数の値がnullであるかどうかを決定する場合はtypeofではなく、他の方法でアクセスする必要があります.