The most popular JavaScript interpreter is V8 used by Google Chrome and NodeJS. Others include SpiderMonkey (Firefox), JavaScriptCore aka Nitro (Safari) and Chakra (Microsoft Edge).
Normal
A sequential array, e.g. [1,2,3]
, is implemented in a linear storage buffer (memory). Once array is full it increases in size. While convention is for it to double in size implementations differ.
Sparse
JS allows you to specify any i-th element in an array. For example:
const array = [];
array[0] = 1;
array[1] = 2;
array[3] = 3;
In this case array[2]
is not defined.
It is an array hole and this type of array is called a sparse array.
In this case V8 will use a hash table to store the elements of the array.
This eliminates the space wasted by empty spots.
HYPOTHESIS: Since a sparse array is implemented as an actual hash table, it may be faster to use an array instead of an object when you desire a hash table for your own application with numeric keys, e.g. sequential primary IDs. For example:
const map = []
map[532] = 'blah'
map[2727] = 'foo'
RESULT: No difference in performance. Why?
(TODO)
How JavaScript Objects are Implemented. Eddy Bruel. MLOC.JS. 2014-06-07. Explanation on implementing SpiderMonkey’s Objects as shape trees. After 20 minutes there is discussion regarding arrays.
Breaking the JavaScript Speed Limit with V8. Daniel Clifford. Google I/O 2012. 2012-06-29.
The pitfalls of using objects as maps in JavaScript. Axel Rauschmayer. ②ality – JavaScript and more. 2012-01-03.
V8: an open source JavaScript engine. Lars Bak. Google. 2008-08-15.
Writing Fast, Memory-Efficient JavaScript Addy Osmani. Smashing Magazine. 2012-10-05.