Порядок элементов в файле React.addons.createFragment

Я читаю статью https://facebook.github.io/react/docs/create-fragment.html и заметил, что инженеры FB полагаются на макет памяти объекта (порядок свойств):

if (this.props.swapped) {
  children = React.addons.createFragment({
    right: this.props.rightChildren,
    left: this.props.leftChildren
  });
} else {
  children = React.addons.createFragment({
    left: this.props.leftChildren,
    right: this.props.rightChildren
  });
}

Мне что-то не хватает или они полагаются на ненадежную и предоставляют хрупкий код?

PS: вопрос задан (и я ожидаю, что он будет дан ответ) с точки зрения спецификации ES, а не с точки зрения реализации JS-движка (который может быть изменен в спецификации).

Ответ 1

(Отказ от ответственности: я не говорю от лица Facebook, это мое собственное мнение)

Возможно, вы пропустили эту заметку (которая может быть немного более преобладающей):

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

Однако, предстоящая версия ECMAScript (ES6/ES2015) фактически формализует поведение итерации (если я правильно понимаю спецификацию).

В спецификации он сказал о объекте внутреннего метода [[Enumerate]]:

[[Enumerate]] должен получить собственные ключи свойств целевого объекта, как если бы он вызвал внутренний метод [[OwnPropertyKeys]].

И [[OwnPropertyKeys]] определяется как

Когда вызывается внутренний метод O [[OwnPropertyKeys]], выполняются следующие шаги:

  • Пусть ключи представляют собой новый пустой список.
  • Для каждого собственного ключа свойства P of O, который является целым индексом, в порядке возрастания числового индекса
    • Добавить P как последний элемент ключей.
  • Для каждого собственного ключа свойства P из O, который является строкой, но не является целым индексом, в порядке создания свойства
    • Добавить P как последний элемент ключей.
  • Для каждого собственного ключа свойства P of O, который является символом, в порядке создания свойства
    • Добавить P как последний элемент ключей.
  • Возвратные ключи.