Почему в примере ниже правильный ответ 0, затем 1?
В документации MDN к for..in прямо пишут, что порядок детерминирован и одинаков во всех браузерах/движках:
The traversal order, as of modern ECMAScript specification, is well-defined and consistent across implementations.

Within each component of the prototype chain, all non-negative integer keys (those that can be array indices) will be traversed first in ascending order by value, then other string keys in ascending chronological order of property creation.
Причем русскоязычная версия там же иначе описывает порядок обхода. Надо бы поправить перевод.

На Русском языке лучше прочитать про порядок свойств на learn.javascript.ru
Правильный ответ - зависит от браузера. В спецификации порядок перебора ключей объекта не определён, разные браузеры в разные годы то сортировали ключи то нет.
То что сейчас большинство браузера сортирует - не говорит о том, что они и завтра будут сортировать.
Если вам важен порядок перебора используйте массив, например.