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

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

[].length // => 0: мас­сив не име­ет эле­мен­тов
['a','b','c'].length // => 3: наи­боль­ший ин­декс ра­вен 2, дли­на рав­на 3

Для разреженных массивов значение свойства length больше числа элементов, и все, что можно сказать в этом случае, – это то, что значение свойства length гарантированно будет превышать индекс любого элемента в массиве. Или, говоря иначе, массивы (разреженные или нет) никогда не будут содержать элемент, индекс которого будет больше или равен значению свойства length массива.

Для поддержки этого свойства массивы проявляют две особенности поведения.

Первая была описана выше: если присвоить значение элементу массива, индекс i которого больше или равен текущему значению свойства length, в свойство length записывается значение i+1.

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

a = [1,2,3,4,5]; // Соз­дать мас­сив с пя­тью эле­мен­та­ми. 
a.length = 3; // те­перь мас­сив a со­дер­жит эле­мен­ты [1,2,3]. 
a.length = 0; // Уда­лит все эле­мен­ты. 
a - пус­той мас­сив []. 
a.length = 5; // Дли­на рав­на 5, но эле­мен­ты от­сут­ст­ву­ют, по­доб­но Array(5)

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

В ECMAScript 5 свойство length массива можно сделать доступным только для чтения, с помощью Object.defineProperty()

a = [1,2,3]; // Соз­дать мас­сив a с тре­мя эле­мен­та­ми. 
Object.defineProperty(a, "length", // Сде­лать свой­ст­во length 
                         {writable: false}); // дос­туп­ным толь­ко для чте­ния. 
a.length = 0; // a не из­ме­нит­ся.

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


<<< back

results matching ""

    No results matching ""