iteration order is not guaranteed
The order is not guaranteed but is consistent. It means that
_.forOwnRight is guaranteed to provide the result reversed from
It's as per specification: it does not state how object's properties must be ordered so it's up to JS engine how to handle it (and they do that differently for performance reasons).
A note: the order depends not only on the particular ES implementation, but also on runtime, since modern JS VMs do a lot of heuristics in runtime.
For the ones curious about optimizations here is a good link (it seriously does not fit to cover in this Q/A):