Другие ответили на вопросы о массивах, поэтому я просто хотел предоставить некоторую информацию об объектах.
При этом стандарт не существует, но de facto определяет, что объект будет перечисляться в порядке вставки, за исключением того, что числа располагаются в порядке возрастания и перечисляются первыми. Обычно я говорю, но это поведение далеко не стандартизировано (и фреймворки, такие как jQuery, не стандартизируют его, AFAIK).
Вы можете протестировать браузеры с помощью этого jsFiddle:
http://jsfiddle.net/7cCpu/4/
Объект {"foo":"bar", "bar":"foo", "baz":"baz", "3":3, "2":2, "1":1}
перечисляет следующим образом:
foo, bar, baz, 3, 2, 1 // insertion order
1, 2, 3, foo, bar, baz // Chrome enumeration
1, 2, 3, foo, bar, baz // Opera
1, 2, 3, foo, bar, baz // IE9
foo, bar, baz, 3, 2, 1 // Firefox (!!!)
У меня не установлен Safari, но я предполагаю, что это то же самое, что и Chrome. В любом случае, дело в том, что вы можете делать предположения - это не случайно - но, вероятно, лучше использовать массив, если вы зависите от точного перечисления.
Еще неприятнее - это то, что Дури указал выше, где удаление и замена значения для ключа изменяет ситуацию дальше. Посмотрите, что происходит, когда я delete bar
и делаю Object.bar = "foo"
, а затем перечисляю:
1, 2, 3, foo, baz, bar // Chrome enumeration
1, 2, 3, foo, baz, bar // Opera
1, 2, 3, foo, bar, baz // IE9 (!!!)
foo, baz, 3, 2, 1, bar // Firefox (!!!)