Показать сообщение отдельно
  #17 (permalink)  
Старый 07.02.2019, 05:06
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от 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(" > "))
Ответить с цитированием