Чтобы быть более точным, получаем ли мы все свойства объекта в том же порядке, в котором они были добавлены, если мы перебираем его?

Что ж, ответ и да, и нет.

Да и Нет, что это значит??

Объекты упорядочены особым образом и имеют некоторые правила упорядочения:

  1. Числа (целые числа) упорядочиваются первыми, и они сортируются внутри себя от наименьшего к наибольшему, пока они >=0 .
  2. Строки идут вторыми, и они упорядочены внутри себя в соответствии с их порядком вставки.
  3. Символы идут последними, и они также упорядочены внутри себя по порядку вставки.

Давайте посмотрим на пример:

Но подождите, почему '9' стояло раньше 36, если сначала упорядочены числа, а затем строки?

Что ж, ответ таков: JavaScript увидит, можно ли преобразовать вашу строку в число, и если сможет, то упорядочит ее с числами, а не со строками, что означает, что здесь происходит неявное преобразование типов.

Хорошо, но тогда '00' также должно быть преобразовано в 0(number) и стоять перед 1, почему этого не происходит?

По-видимому, здесь он преобразует его в новое число, затем делает что-то похожее на toString() с новым числом и сравнивает эту новую строку с исходной строкой.

Итак, в основном, если мы можем извлечь строку обратно из числа (после преобразования типа), т.е. если они совпадают, тогда строка может быть сгруппирована с числами, и если она не совпадает, то она обрабатывается только как строка, которая происходит в случае '00'.

Что, если наш код сильно зависит от порядка вставки свойств объекта, и мы хотим, чтобы они были в том же порядке, в котором они были вставлены?

Чтобы решить эту проблему, у нас есть map объект JavaScript, map гарантирует упорядоченные ключи объектов в JavaScript, и мы можем гибко обрабатывать пары ключ-значение и их порядок.

Надеюсь, вы узнали что-то новое и получили удовольствие от чтения!