Подтвердить что ты не робот

Порядок итераций для циклов for.in в Javascript

Предположим, что у меня есть объект Javascript, который инициализируется

var letters = {q:0, t:0, o:0, b:0, y:0, n:0, u:0, m:0, p:0, 
               w:0, a:0, d:0, k:0, v:0, c:0, z:0, l:0, j:0, 
               i:0, e:0, g:0, s:0, x:0, r:0, h:0, f:0};

а затем я хочу перебрать ключи этих объектов

for(var letter in letters) {
    // code goes here
}

В Firefox 3 и Internet Explorer 8 объекты повторяются в том порядке, в котором они перечислены в объявлении объекта (q, t, o, b, y и т.д.).

Могу ли я полагаться на это? Предположим, что я не изменяю свой объект каким-либо образом перед итерацией. Является ли это частью стандарта ECMAScript? Кто-нибудь знает, какие браузеры выполняют итерацию в заявленном порядке?

4b9b3361

Ответ 1

Нет, на него нельзя положиться, по крайней мере не в Firefox:

А для... в цикле выполняется итерация по свойствам объекта в произвольном порядке.

Ответ 3

Чтобы обеспечить конкретный порядок обработки свойств объекта во встраиваемом цикле, вам необходимо определить порядок сортировки или метод списка для объекта. Если вы определяете все свойства при создании объекта, будет создан массив имен свойств, но если вы можете добавлять или удалять свойства, требуется метод.

Если порядок обработки существенно по какой-либо причине, может быть предпочтительным массив.

Ответ 4

Порядок определяется в спецификациях как "произвольный", поэтому нет; вы не должны полагаться на определенный порядок.

Ответ 5

Нет, вы не должны полагаться на это.