Который занимает меньше памяти: массив Javascript или объект Javascript? - PullRequest
15 голосов
/ 08 августа 2009

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

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

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

Я не знаю много о внутренностях движка Javascript, так что ...

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

Ответы [ 3 ]

12 голосов
/ 08 августа 2009

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

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

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

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

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

0 голосов
/ 08 августа 2009

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

0 голосов
/ 08 августа 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...