Что занимает меньше памяти: массив Javascript или объект Javascript?

Если у меня есть список Javascript, который будет иметь только числовые клавиши, которые занимают меньше памяти?

var array = [];
array[0] = 'hello';
array[5] = 'world';
array[50] = 'foobar';

var obj = {};
obj[0] = 'hello';
obj[5] = 'world';
obj[50] = 'foobar';

Я не знаю толку о внутренних компонентах Javascript, поэтому...

Я прошу, потому что этот массив, преобразованный в строку, будет иметь кучу undefined в середине. Действительно ли они хранятся в некотором роде или просто вставляются в преобразование строк?

Ответы

Ответ 1

Массив - это в основном упорядоченный набор значений, связанных с одним именем переменной.

В вашем примере я думаю, что вы пытаетесь создать ассоциативный массив, и вы должны использовать объект, Array не предназначен для использования для пар ключ/значение.

Также длина массива неограниченно возрастает, когда вы присваиваете значение индексу с большей длиной текущей длины массива:

var array = new Array();
array[99] = "Test";
// array.length is now 100

Проверьте подробную статью по этому вопросу.

Ответ 2

JavaScript не реализует такие массивы, как другие языки, поэтому вы не получаете никаких улучшений производительности, присущих нормальному массиву (по памяти); в JavaScript массив очень похож на объект; Фактически, это по существу объект с несколькими дополнительными методами и возможностями (такими как длина, которая сама обновляется). Я бы сказал, что не быстрее.

Ответ 3

Вероятно, массив Javascript, потому что вы можете "использовать" только числовые значения ключей, где, поскольку литералы объектов предоставляют пространство для значений ключа, и даже если вы используете числовые значения ключа, они, вероятно, обрабатываются иначе, чем значения числовых ключей для массивы.

Скорее всего, массивы причин не могут иметь текстовые значения, основанные на тексте, потому что они обрабатываются иначе, чем литералы объектов. Я предполагаю, что, поскольку они, вероятно, обрабатываются по-разному, обработка для массива, вероятно, более оптимизирована для значений числовых ключей, были, поскольку литерал объекта оптимизирован для использования строк или чисел в качестве их ключей.