Подтвердить что ты не робот

В чем разница между конденсированными массивами и литеральными массивами?

Как говорится в заголовке: В чем разница между конденсированными массивами и литеральными массивами?

new Array("John", "Bob", "Sue"); // condensed array

["John", "Bob", "Sue"]; // literal array

Есть ли что-то, что я могу сделать с тем, что я не могу сделать с другим? Или это так, как оно хранится в памяти?

4b9b3361

Ответ 1

Нет, нет никакого различия в создаваемом объекте, они одинаковы.

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

Следует отметить, что массивы в javascript не являются последовательным распределением памяти, а объектами с перечисляемыми именами свойств и несколькими дополнительными (полезными) методами.

Из-за этого создание массива заданной длины является бесполезным и ненужным в большинстве (если не во всех) случаях.

var array = new Array(10);

функционально то же самое, вручную задает длину вашего массива

var array = [];
array.length = 10;

Ответ 2

Существует, по крайней мере, одно известное использование конструктора Array():

String.prototype.repeat= function(n){
    n= n || 1;
    return Array(n+1).join(this);
}

document.writeln('/'.repeat(80))

Ответ 3

Семантика инициализатора массива приведена в разделе 11.1.4 спецификации ECMA 262 5th edition. Вы можете прочитать его там. В нем говорится, что значение инициализатора такое же, как если бы были вызваны new Array. Но с инициализатором вы можете сделать то, что не можете с конструктором. Проверьте это:

> a = [3,,,,5,2,3]
3,,,,5,2,3
> a = new Array(3,,,,5,2,3)
SyntaxError: Unexpected token ,

Я использовал в инициализаторе то, что известно как "элиция".

Конструктор массива имеет немного гибкости своего

a = new Array(10)
,,,,,,,,,
a = new Array(1,2,30)
1,2,30

Таким образом, один аргумент для конструктора создает массив из множества неопределенных.