JavaScript には 8 つのデータ型があります。つまり、Unknown、Null、Boolean、Number、String、Object、Symbol、BigInt です。
その中で、Symbol と BigInt は ES6 の新しいデータ型です。
- シンボルは、作成後に発生する可能性のあるグローバル変数の競合の問題を解決するために、作成後に一意で不変のデータ型を表します。
- BigInt は、任意精度の形式で整数を表すことができるデジタル データ型です。BigInt を使用すると、数値が上限を超える場合でも、大きな整数を安全に保存および操作できます。
- Number が表現できる安全な整数の範囲。
これらのデータは、プリミティブ データ型と参照データ型に分類できます。
- スタック: プリミティブ データ型 (未定義、Null、ブール、数値、文字列)
- ヒープ: 参照データ型 (オブジェクト、配列、関数)
2 つのタイプの違いは、保存場所の違いです。
- プリミティブ データ型は、スタック (スタック) に直接格納される単純なデータ セグメントであり、占有スペースが小さく、サイズが固定されており、頻繁に使用されるデータに属するため、スタックに格納されます。
- ヒープに格納される参照データ型のオブジェクトは大きな領域を占有し、サイズは固定されていません。スタックに格納されると、実行中のプログラムのパフォーマンスに影響します。参照データ型は、ヒープ内のエンティティの開始アドレスを指すポインターをスタックに格納します。インタプリタが参照値を探すとき、まずスタック上のアドレスを取得し、アドレスを取得した後、ヒープからエンティティを取得します。
ヒープとスタックの概念は、データ構造とオペレーティング システムのメモリ、つまりデータ構造に存在します。
- データ構造上、スタック内のデータへのアクセス方法は先入れ後出しとなります。
- ヒープは優先度に従ってソートされた優先キューであり、サイズに応じて優先度を指定できます。
オペレーティング システムでは、メモリはスタック領域とヒープ領域に分割されます。
- スタック領域のメモリはコンパイラによって自動的に確保・解放され、関数のパラメータ値やローカル変数の値などが格納されます。データ構造内のスタックのように動作します。
- ヒープメモリの割り当てと解放は開発者が行うのが一般的ですが、開発者が解放しない場合はプログラム終了時にガベージコレクション機構によって回収される可能性があります。