2014-12-11 2 views
1

Я как бы растерялся, почему нет размера массива или объекта, который не подсчитывается, когда Смит добавляется в список ...?Почему размер массива не равен 7?

var a = []; 
a[0] = 12; 
a[5] = "Lou"; 
a["Sue"] = "Smith"; 
console.log("a: ", a); 
console.log("length: ", a.length); 
+0

Это 6, 0 = 12, 1-4 = undefined, 5 = Lou. В массиве нет элемента с индексом «Sue» – Evgeniy

+3

Массивы содержат элементы, индексированные числовыми свойствами. Когда вы используете '[" Sue "]', который просто добавляет регулярное свойство к объекту, который не считается частью массива. – jfriend00

+0

Эй, почему downvote .. Его хороший вопрос и должен быть оценен. –

ответ

3

Array.length свойство просто берет последнего числового идентификатора и добавляет один к нему

(Если массив формируется Array конструктором, он будет иметь, что length, возложенный на него, который был принят в конструктор).

Итак, здесь последний числовой идентификатор был 5 так длина вернет 5 + 1, которая равна 6.

MDN

При установке свойства в массиве JavaScript, когда свойство является действительным массив и этот индекс находится за пределами текущих границ массива , двигатель будет обновить свойство длины массива соответственно

+0

Вы говорите, что «последний численный идентификатор» пустого массива «-1»? :-) – Bergi

+0

@ Bergi ах! Нет :) –

+0

«* если он пуст, он всегда будет 0 *». Не так. Длина всегда ** не менее ** наибольшего индекса + 1. Например. 'var a = new Array (10);'. * a.length * равно 10, но нет элементов (массив «пуст»). – RobG

3

Поскольку результат массив будет выглядеть подобно

[12, undefined, undefined, undefined, undefined, "Lou"] 

Я могу сказать больше, это будет иметь свойство Sue

a.Sue // -> "Smith" 
Object.keys(a) // -> ["0", "5", "Sue"] 

Вы можете получить более подробную информацию с this article.

+0

Да, это то, что ОП спрашивает .. хотя 'array' по-прежнему является« объектом », и теперь он содержит' properta.Sue', почему длина не вычисляется как 6 –

+0

. Обратите внимание, что в индексах с 1 по 4 нет членов, они не существует. Линейный эквивалентный массив - '[12 ,,,,," Lou "]'. – RobG

Смежные вопросы