Гарантирован ли порядок массива JavaScript?

Предполагая, что массив JavaScript размещен в форме (с использованием ajax/JQuery), гарантирован ли порядок в массиве?

Действительный вопрос от @Quentin "Определить", отправленный в форме "

$.ajax({
  type: "POST",
  url: url,
  data: { foo: [{ name: "one" }, { name: "two" }] },
  success: success,
  dataType: dataType
});

Расширение вопроса (из-за вышеизложенного). Гарантирует ли массив сохранение порядка на стороне сервера?

Ответ 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.

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

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