Заключение в кавычки John Resig :
В настоящее время весь главный цикл браузеров по свойствам объекта в порядке, в котором они были определены. Chrome делает это также, за исключением пары случаев. [...] Это поведение явно оставляет неопределенным спецификация ECMAScript. В ECMA-262 разделите 12.6.4:
механика перечисления свойств... является зависящей от реализации.
Однако спецификация очень отличается от реализации. Все современные реализации ECMAScript выполняют итерации через свойства объектов в порядке, в котором они были определены. Из-за этого команда Chrome считала это, чтобы быть ошибкой и будет фиксировать ее.
Все браузеры уважают порядок определения за исключением Chrome и Opera, которые делают для каждого нечислового имени свойства. В этих двух браузерах вытягивают свойства, чтобы перед первым нечисловым свойством (это, имеет отношение, как они реализуют массивы). Порядок является тем же для Object.keys
также.
Этот пример должен прояснить, что происходит:
var obj = {
"first":"first",
"2":"2",
"34":"34",
"1":"1",
"second":"second"
};
for (var i in obj) { console.log(i); };
// Order listed:
// "1"
// "2"
// "34"
// "first"
// "second"
технические особенности этого менее важны, чем то, что это может измениться в любое время. Не полагайтесь на вещи, остающиеся этот путь.
Короче говоря: Использование массив, если порядок важен для Вас.
От Спецификация языка ECMAScript, разделите 12.6.4 (на for .. in
цикл):
механика перечисления свойств является зависящей от реализации. Порядок перечисления определяется объектом.
И раздел 4.3.3 (определение "Object"):
Это - незаказанный набор свойств, каждое из которых содержит примитивное значение, объект или функцию. Функция, сохраненная в свойстве объекта, вызвана метод.
я предполагаю, что означает Вас, наклон полагается на свойства, перечисляемые в последовательном порядке через реализации JavaScript. (Это был бы плохой стиль так или иначе для доверия определенным для реализации деталям языка.)
, Если Вы хотите свой определенный порядок, необходимо будет реализовать что-то, что определяет его, как массив ключей, которые Вы сортируете прежде, чем получить доступ к объекту с ним.
Элементы объекта, который для/в перечисляет, являются свойствами, которым не установили флаг DontEnum. ECMAScript, иначе JavaScript, в стандарте явно говорится, что "Объект является незаказанным набором свойств" (см. раздел http://www.mozilla.org/js/language/E262-3.pdf 8.6).
Это не будет совместимыми стандартами (т.е. безопасный), чтобы предположить, что все реализации JavaScript перечислят в порядке объявления.
Заказу нельзя доверять. И Opera, и Chrome возвращают неупорядоченный список свойств.
<script type="text/javascript">
var username = {"14719":"A","648":"B","15185":"C"};
for (var i in username) {
window.alert(i + ' => ' + username[i]);
}
</script>
В приведенном выше коде показаны B, A, C в Opera и C, A, B в Chrome.