第1章データ型


01データ型のタイプ

  • 基本タイプ-数値、文字列、ブール値、null、undefined、構成部品
  • 基本プロパティ-値を含む急上昇値
  • をすぐにコピーします.
  • 参照タイプ-オブジェクト、配列、関数、日付、正規表現、Map、WeakMap、Set、WeakSet
  • 参照フィーチャー-値を含む浮動小数点のセットであるアドレス値
  • をコピーします.

    02データ型の背景知識


    1-2-1メモリとデータ

  • 1 bit - 0, 1
  • 1 byte = 8 bit
  • 1-2-2識別子と変数

  • 変数->変更可能->データ->文字列、数値、オブジェクト、配列...
  • 識別子->変数名
  • 03変数宣言とデータ割当


    1-3-1変数宣言

    var ys;
  • 可変データを生成します.このデータの識別子はysです.->
  • ディスクまたはスペース、変更可能なデータを格納

    1-3-2データ割付

    var ys;
    ys = 'hi'
    
    var ys = 'hi' // ys는 변수 영역, 'hi'는 데이터 영역
    変数領域に直接値を代入しないのはなぜですか?
    ->メモリを効率的に管理しながら、データを簡単に変換できます.

    04基本データと参考データ


    1-4-1不変値

  • 変数と定数->変数領域
  • 不変性->データ領域
  • 定数と不変値を混用しないでください.
    変数ysで文字列「hi」を指定し、「hihello」に置き換えますか?新しい文字列「hihello」を作成し、「hihello」ではなく変数ysにアドレスを格納します。 要するに、「hi」と「hihello」は全く異なるデータです。
  • 1-4-2可変

  • のデータ領域に格納値はすべて不変値
  • である.
  • 変数領域は、他の値を任意に代入することができる.
  • 不変(可変)
  • 1-4-3レプリケーション変数の比較

  • オブジェクトのプロパティを変更する場合は
  • です.
    var ys = 30;
    var preYs = ys;
    var obj1 = { c: 12, d: 'ok' }
    var obj2 = obj1
    
    preYs = 29;
    obj2.c = 13;
    
    ys !== preYs // true
    obj1 === obj2 // true
  • オブジェクト自体が
  • に変更されました.
    var ys = 30;
    var preYs = ys;
    var obj1 = { c: 12, d: 'ok' }
    var obj2 = obj1
    
    preYs = 29;
    obj2 = { c: 13, d: 'okk' }
    
    ys !== preYs // true
    obj1 === obj2 // false

    05不変オブジェクト


    1~5-1の不変オブジェクトを作成する簡単な方法

  • 不変オブジェクトはいつ必要ですか?
    ->値に渡されたオブジェクトを変更した場合、元のオブジェクトは
  • に変更する必要はありません.
  • immutable.js, baobab.jsなど...
  • // 기존 정보를 복사해서 새로운 객체를 반환하는 함수(얕은복사)
    var copyObject = function (target) {
      var result = {};
      for (var prop in target) {
        result[prop] = target[prop];
      }
      return result;
    };

    1-5-2浅い放射と深い放射

  • 浅いレプリケーション(浅いレプリケーション)-次のステップの値
  • のみをレプリケーションします.
  • 深度コピー(deepcopy)-内部値をすべて検索し、
  • をすべてコピーします.
    // 객체의 깊은 복사를 수행하는 범용 함수
    var copyObjectDeep = function(target) {
      var result = {};
      if (typeof target === 'object' && target !== null) {
        for (var propr in target) {
          result[prop] = copyObjectDeep(target[prop]); // 재귀적으로 수행
        }
      } else {
        result = target;
      }
      return result;
    ];
    // JSON을 활용한 간단한 깊은 복사
    var copyObjectViaJSON = function (target) {
      return JSON.parse(JSON.stringify(target));
    };
    
    // 메서드(함수)나 숨겨진 프로퍼티인 __proto__나 getter/setter 등과 같이 JSON으로 변경할 수 없는 프로퍼티들은 모두 무시합니다.

    06未定義とnull

  • JavaScriptエンジンが自動的に未定義に付与された場合、
  • の値が入力変数ではなく、データ領域のメモリアドレスが指定されていない識別子にアクセスする場合、
  • .
    オブジェクト内部に存在しないプロパティにアクセスしようとすると、
  • 文または呼び出されていない関数の実行結果を返さない
  • 未定義の2つのケースは
  • である.
  • ユーザーが明示的に(実際のデータ)指定した場合は、->NULL値を使用します.
  • 空の要素にアクセスしようとすると、
  • が返されます.