Ответ 1
Нет, на него нельзя положиться, по крайней мере не в Firefox:
А для... в цикле выполняется итерация по свойствам объекта в произвольном порядке.
Предположим, что у меня есть объект 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? Кто-нибудь знает, какие браузеры выполняют итерацию в заявленном порядке?
Нет, на него нельзя положиться, по крайней мере не в Firefox:
А для... в цикле выполняется итерация по свойствам объекта в произвольном порядке.
Заказ не гарантируется. См. Этот вопрос SO для получения дополнительной информации: Итерации по ассоциативному массиву Javascript в отсортированном порядке.
Чтобы обеспечить конкретный порядок обработки свойств объекта во встраиваемом цикле, вам необходимо определить порядок сортировки или метод списка для объекта. Если вы определяете все свойства при создании объекта, будет создан массив имен свойств, но если вы можете добавлять или удалять свойства, требуется метод.
Если порядок обработки существенно по какой-либо причине, может быть предпочтительным массив.
Порядок определяется в спецификациях как "произвольный", поэтому нет; вы не должны полагаться на определенный порядок.
Нет, вы не должны полагаться на это.