Краткое руководство
Неделю назад я создал алгоритм, основанный на порядке объекта в JavaScript. Если вы пришли с языка без ожидаемого порядка объектов, вы можете сказать «Что ?!» Сейчас.
Если вы знакомы с JavaScript и его причудами, я все равно ожидал бы такого же ответа, поскольку он имеет несколько нюансов и, кажется, не является широко известным. Давайте посмотрим на объект, который я использовал:
Милый, мы вернули наш объект в том порядке, в котором мы его определили. Затем мы можем перебирать этот объект, используя for (let coin in Coins) {/*do work*/}
. Это работает, если мы определяем каждый ключ отдельно, возвращая хронологический порядок:
Однако есть особый случай, когда это практическое правило не срабатывает: если вы пытаетесь использовать символы или целые значения в качестве ключей (да, даже интерпретированные целочисленные значения).
Это результат, которого вы можете ожидать от любой реализации стандарта ES6, выпущенной для выпуска Javascript 2015 года.
Это изменение поведения связано с изменением реализации внутреннего метода ownPropertyKeys
(гарантированный порядок), который все используют Reflect.ownKey
, Object.getOwnPropertyNames
и Object.keys
, но имеют (негарантированный порядок). Чтобы перечислить их, используйте Reflect.enumerate
или for-in loop
.
Некоторые заметки…
- Хотя это предсказуемое и ожидаемое поведение, пользователь может использовать старую версию JavaScript, где это не было стандартным, хотя это было частой реализацией.
- Для более гибкой и надежной обработки пар ключ-значение и их порядка попробуйте новый JavaScript Map Object.
Ресурсы
- Https://tc39.es/ecma262/#sec-ordinaryownpropertykeys
- Https://2ality.com/2015/10/property-traversal-order-es6.html#traversing-the-own-keys-of-an-object
- Https://hackernoon.com/out-of-order-keys-in-es6-objects-d5cede7dc92e
- Https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map