Чтобы быть более точным, получаем ли мы все свойства объекта в том же порядке, в котором они были добавлены, если мы перебираем его?
Что ж, ответ и да, и нет.
Да и Нет, что это значит??
Объекты упорядочены особым образом и имеют некоторые правила упорядочения:
- Числа (целые числа) упорядочиваются первыми, и они сортируются внутри себя от наименьшего к наибольшему, пока они
>=0
. - Строки идут вторыми, и они упорядочены внутри себя в соответствии с их порядком вставки.
- Символы идут последними, и они также упорядочены внутри себя по порядку вставки.
Давайте посмотрим на пример:
Но подождите, почему '9'
стояло раньше 36
, если сначала упорядочены числа, а затем строки?
Что ж, ответ таков: JavaScript увидит, можно ли преобразовать вашу строку в число, и если сможет, то упорядочит ее с числами, а не со строками, что означает, что здесь происходит неявное преобразование типов.
Хорошо, но тогда '00'
также должно быть преобразовано в 0(number)
и стоять перед 1
, почему этого не происходит?
По-видимому, здесь он преобразует его в новое число, затем делает что-то похожее на toString()
с новым числом и сравнивает эту новую строку с исходной строкой.
Итак, в основном, если мы можем извлечь строку обратно из числа (после преобразования типа), т.е. если они совпадают, тогда строка может быть сгруппирована с числами, и если она не совпадает, то она обрабатывается только как строка, которая происходит в случае '00'
.
Что, если наш код сильно зависит от порядка вставки свойств объекта, и мы хотим, чтобы они были в том же порядке, в котором они были вставлены?
Чтобы решить эту проблему, у нас есть map
объект JavaScript, map
гарантирует упорядоченные ключи объектов в JavaScript, и мы можем гибко обрабатывать пары ключ-значение и их порядок.
Надеюсь, вы узнали что-то новое и получили удовольствие от чтения!