ECMAScript делает имеют Associated Arrays - объекты (и расширением, Массивы) являются примером
Однако, some properties of Arrays are treated specially:
объекты массива дают специальный тр поедание определенного класса имен собственности. Имя свойства P
(в виде значения String) является индексом массива тогда и только тогда, когда ToString(ToUint32(P))
равно P
..
.. В частности, всякий раз, когда это свойство добавляется имя которого является индексом массива, свойство длина изменяется, в случае необходимости, быть более, чем одним числовым значением этого индекса массива ..
Таким образом, учитывая arr = []
, выражения arr["1"]
и arr[1]
относятся к же свойство имени. Так как P
(имя свойства) равен «1», и length
0 сверху, то назначение такого имущества установит arr.length
к ToUint32(P)+1
или 2.
Это не возможно изменить это поведение. Если вы хотите, чтобы не, у вас есть специальное свойство length
, а затем используйте «обычный» объект вместо массива. Тем не менее, многие из Array.prototype
функций могут использоваться с произвольными объектами (с некоторыми причудами реализации в стороне), которые имеют свойство length
и объект может быть создано таким образом, что он использует Array.prototype
в качестве своего собственного прототипа.
Все, что было сказано, сообщение не говорит, что такое реальная проблема. Вместо того, чтобы предполагать, что это должно быть сделано таким образом, подумайте о том, что такое намерение: например. почему ["10"]? И что не так, если есть «11 элементов», если объект будет использоваться в списке?
Пожалуйста, прочитайте эту статью, прежде чем обсуждать это заявление: термин «массив» в названии не означает упорядоченную последовательность и не исключает возможности дополнительного понятия длины или использование хэширования , и т.д.Если вы идете по различным определениям, не забудьте указать, что это такое и какое желаемое поведение для данной операции.
Массивы не предназначены для этого, так зачем вам нужен массив? Возможно, объекты имеют функциональность, которую вы ищете, но вы просто не знаете. – Cam
Я использую javascript с проектом в SAPUI5, и мне нужны массивы для заполнения в выпадающих меню, а выпадающие списки не поддерживают объекты. Мне нужны только массивы .. :( – WISH
Javascript arrays ** are ** Objects. «Индексы» - это просто числовые имена свойств, свойство length определено как самый высокий индекс плюс один, это не количество индексов. – RobG