JavaScript. Подробное руководство, 6-е издание, стр. 77

<b>О in а1 // =&gt; false: а1 не имеет элемента с индексом О</b>

<b>О in а2 // =&gt; true: а2 имеет элемент с индексом 0 и со значением undefined</b>

Некоторые старые реализации (такие как Firefox 3) некорректно вставляли элементы со значением

<b>undefined</b>
на место пропущенных элементов. В этих реализациях литерал
<b>[1,,3]</b>
был эквивалентен литералу
<b>[1, undefined,3].</b>

7.4. Длина массива

Любой массив имеет свойство

<b>length</b>
, и это свойство отличает массивы от обычных объектов JavaScript. Для плотных (т.е. неразреженных) массивов свойство
<b>length</b>
определяет количество элементов в массиве. Его значение на единицу больше самого большого индекса в массиве:

<b>[].length // =&gt; 0: массив не имеет элементов</b>

<b>['а','Ь','с'].length // =&gt; 3: наибольший индекс равен 2, длина равна 3</b>

Для разреженных массивов значение свойства length больше числа элементов, и все, что можно сказать в этом случае, - это то, что значение свойства

<b>length</b>
гарантированно будет превышать индекс любого элемента в массиве. Или, говоря иначе, массивы (разреженные или нет) никогда не будут содержать элемент, индекс которого будет больше или равен значению свойства
<b>length массива</b>
. Для поддержки этого свойства массивы проявляют две особенности поведения. Первая была описана выше: если присвоить значение элементу массива, индекс
<b>і</b>
которого больше или равен текущему значению свойства
<b>length</b>
, в свойство
<b>length</b>
записывается значение
<b>i+1</b>
.

Вторая особенность в поведении, обеспечивающем работу свойства

<b>length</b>
, заключается в том, что при присваивании свойству
<b>length</b>
неотрицательного целого числа n, меньшего, чем его текущее значение, все элементы массива с индексами, большими или равными значению n, удаляются из массива:

<b>а = [1,2,3,4,5]; // Создать массив с пятью элементами.</b>

<b>a.length =3; // теперь массив а содержит элементы [1,2,3].</b>

<b>a.length = 0; // Удалит все элементы, а - пустой массив [].</b>

<b>a.length = 5; // Длина равна 5, но элементы отсутствуют, подобно Аггау(5)</b>

В свойство

<b>length</b>
массива можно также записать значение больше, чем его текущее значение. В этом случае в массив не добавляются новые элементы, а просто создается разреженная область в конце массива.

В ECMAScript 5 свойство

<b>length</b>
массива можно сделать доступным только для чтения, с помощью
<b>Object.defineProperty()</b>
(раздел 6.7):

<b>а = [1,2,3]; // Создать массив а с тремя элементами.</b>

<b>Object.defineProperty(a, ‘length&quot;, // Сделать свойство length</b>

<b>      {writable: false}); // доступным только для чтения, </b>

<b>a.length =0; //а не изменится.</b>

Аналогично, если сделать элемент массива ненастраиваемым, его нельзя будет удалить. Если элемент нельзя будет удалить, то и свойство

<b>length</b>
не может быть установлено в значение, меньшее или равное индексу ненастраиваемого элемента. (Смотрите раздел 6.7, а также описание методов
<b>Object.seal()</b>
и
<b>Object.freeze()</b>
в разделе 6.8.3.)

7.5. Добавление и удаление элементов массива

Мы уже видели, что самый простой способ добавить элементы в массив заключается в том, чтобы присвоить значения новым индексам:

<b>а = [] // Создать пустой массив.</b>

<b>а[0] = &quot;zero&quot;; // И добавить элементы.</b>

<b>а[1] = &quot;one&quot;;</b>

Для добавления одного или более элементов в конец массива можно также использовать метод

<b>push():</b>

<b>а = []; // Создать пустой массив</b>

<b>a.push(&quot;zero&quot;) // Добавить значение в конец, а = [&quot;zero&quot;]</b>

<b>a.push(&quot;one&quot;, &quot;two&quot;) // Добавить еще два значения, </b>
<b>а = [&quot;zero&quot;, &quot;one&quot;, &quot;two&quot;]</b>

Добавить элемент в конец массива можно также, присвоив значение элементу

<b>а[а.length]</b>
. Для вставки элемента в начало массива можно использовать метод
<b>unshift()</b>
(описывается в разделе 7.8), при этом существующие элементы в массиве смещаются в позиции с более высокими индексами.

Удалять элементы массива можно с помощью оператора

<b>delete</b>
, как обычные свойства объектов:

<b>а = [1.2.3];</b>

<b>delete а[1]; // теперь в массиве а отсутствует элемент с индексом 1</b>

<b>1 in а   // =&gt; false: индекс 1 в массиве не определен</b>

<b>a.length // =&gt; 3: оператор delete не изменяет свойство length массива</b>

Удаление элемента напоминает (но несколько отличается) присваивание значения

<b>undefined</b>
этому элементу. Обратите внимание, что применение оператора
<b>delete</b>
к элементу массива не изменяет значение свойства
<b>length</b>
и не сдвигает вниз элементы с более высокими индексами, чтобы заполнить пустоту, оставшуюся после удаления элемента. После удаления элемента массив превращается в разреженный массив.