Сообщение от AntonMs
|
объекты это чисто для хранения информации, там нет учета индексов.
|
Сообщение от рони
|
браузер не обязан учитывать порядок ключей
|
Ключи вы можете получить при помощи метода Object.keys или Object.entries
Посмотрев определение, например, Object.entries, в спецификации (пункт 19.1.2.5), вы увидите, что для получения списка ключей/значении используется внутренний метод EnumerableOwnPropertyNames, в определении которого (пункт 7.3.21) видно, что на объекте вызывается внутренний метод [[OwnPropertyKeys]], в определении которого(9.1.11 и 9.1.11.1) видно, в каком порядке строится список ключей.
Сначала добавляются ключи, чьи строковые представления могут быть приведены к целочисленному значению, в возрастающем порядке их численных значении.
Затем добавляются ключи, чьи строковые представления не могут быть приведены к целочисленному значению, в порядке их создания.
Затем добавляются ключи типа Symbol, в порядке их создания.
Хотя в целом, вы не можете получить ключи в порядке создания, но договорившись, что ключи будут только строками не приводимыми к целочисленному значению(я уже это писал выше в №12), вы всё-таки получите ключи в порядке создания!
Если вам нужен только вызов внутреннего [[OwnPropertyKeys]], то используйте Reflect.ownKeys
alert(Reflect.ownKeys({ b: 1, a: 2, c: 3 }).join(" > "))