Порядок итераций циклов for..in в Javascript - PullRequest
18 голосов
/ 10 июня 2009

Предположим, у меня есть объект 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? Кто-нибудь знает, какие браузеры выполняют итерацию в заявленном порядке?

Ответы [ 5 ]

13 голосов
/ 10 июня 2009

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

Цикл for ... in перебирает свойства объекта в произвольном порядке.

4 голосов
/ 10 июня 2009

Заказ не гарантируется. См. Этот вопрос SO для получения дополнительной информации: Итерация по ассоциативному массиву Javascript в отсортированном порядке .

2 голосов
/ 10 июня 2009

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

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

1 голос
/ 10 июня 2009

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

0 голосов
/ 10 июня 2009

Нет, на это не стоит полагаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...