Является ли порядок полей в объекте javascript предсказуемым при их цикле? - PullRequest
16 голосов
/ 15 марта 2009

В php, если у вас есть следующий код:

$map = array(
  "first" => 1,
  "second" => 2
);

$map["third"] = 3;

foreach($map as $key => $value) {
  // code
}

Вы знаете, что записи будут перечислены в порядке их добавления в массив.

Теперь, могу ли я предположить, что то же правило применяется к эквиваленту Javascript ниже?

map = {
  "first": 1,
  "second": 2
};

map["third"] = 3;

for (key in map) {
  // code
}

Это дубликат: Порядок элементов - для цикла (… in…) в JavaScript

Ответы [ 2 ]

10 голосов
/ 15 марта 2009

Большинство браузеров перебирают свойства в порядке, в котором они были добавлены к объекту, но стандарт Javascript говорит, что порядок не определен, поэтому не стоит полагаться на это поведение. Например, некоторое время назад я читал сообщение в блоге о том, что Google Chrome не всегда демонстрировал такое поведение.

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

0 голосов
/ 15 марта 2009

Нет, поведение зависит от реализации и не гарантируется. Используйте массив, когда необходимо сохранить порядок.

...