JS配列の内部実装メカニズム
JavaScript配列の基本実装の原則は、密集配列と疎配列の2つの状況に分けられます。
- デンスアレイ
密配列とは、配列中の要素がメモリ上の連続するアドレスに連続して格納されている配列のことです。JavaScriptでは密配列は一般にC言語の連続メモリ割り当てに似た仕組みで実装されています。密配列を作成すると、JavaScriptはメモリ内に連続した領域を確保し、そこに配列の要素を格納し、各要素に同じ大きさのメモリ領域が割り当てられます。このようにするとインデックスによって配列内の要素に高速にアクセスしたり、要素を変更したりすることができます。
- 疎行列
疎な配列とは、配列内の要素が連続して格納されているとは限らず、空間(特定のインデックス位置に対応する要素が存在しないこと)が入る可能性のあるものです。 JavaScriptでは、通常、ハッシュテーブルや類似したデータ構造によって疎な配列が実装されます。 JavaScriptで疎な配列を作成する場合、オブジェクトを使用して配列のインデックスと対応する値を格納し、値が存在する場合のみインデックスが格納されます。このように、インデックスを使用して配列内の要素にアクセスすると、 JavaScriptはまずオブジェクト内で対応する値を検索し、インデックスが存在しない場合、 undefinedを返します。
つまり、JavaScript配列は、種類によって、連続したメモリ割り当てによって実装され、配列内の要素の高速なアクセスや変更を可能にする「dense array」と、ハッシュ表やオブジェクトによって実装され、値のあるインデックスとその値のみを格納する「sparse array」に分類できます。