Ответ 1
Вы всегда можете обратиться к стандарту ECMAScript, когда сомневаетесь: Экстремальные объекты Array
Массив - это особый тип объекта на языке, который имеет дополнительную семантику о том, как обрабатывается свойство length в отношении свойств, которые являются целыми числами от 0 до 2 ^ 32. В javascript массив может быть разреженным, если отсутствуют значения в диапазоне от 0 до свойства length. Различные методы массивов учитывают это, например, для каждого игнорирования отсутствующих значений
Что такое недостающее значение?
Язык пытается сделать массивы как можно более активными, чем обычные объекты: вы можете добавить к нему какое-либо свойство и даже иметь объекты, которые наследуются от массива.
var fruits = ["Apple", "Banana"];
fruits.preferred = "Apple";
Этот тип кода не представляет никакой проблемы, но если вы начнете писать:
fruits[100] = "Strawberry";
for(let i = 0; i < fruits.length; ++i) {
...
}
100 - это имя свойства в диапазоне от [0, 2 ^ 32), так что это элемент массива, но в этот момент, какой должна быть length.length? Это должно быть 101, иначе цикл for никогда не получит "Клубника".
Но в этот момент вы должны признать, что существует диапазон элементов [2, 99], которые никогда не были определены: это недостающие значения.
И наоборот, то же самое должно быть верно, когда вы изменяете свойство length
var fruits = ["Apple", "Banana"];
fruits.length = 0;
Теперь цикл for никогда не получит никакого элемента массива: это эквивалентно опорожнению массива fruit.
Также возможно увеличить длину, в результате чего отсутствуют значения
Поэтому да массивы упорядочены, так как вы можете итерировать все свои элементы в порядке возрастания, но имейте в виду, что могут отсутствовать значения