“Another problem with using object literals, is property/key orders are not guaranteed.”
Not true. Starting with ES6, it is guaranteed to be insertion order (for own properties).
Another challenge with object is inherited keys. That’s why it’s usually best to create them via Object.create(null) when using them as dictionaries.