While not shown in the use case (as the above oversimplifies the actual code). Your right that holes have an impact between the array mode / dictionary mode in V8 code. Having holes does not gurantee a trigger into dictionary mode, but is one of the contributing factor in how the internal engine decides the mode.
Probably worth further investigation, gut feel as of now from how I understand it, is the array in our use case would not have any holes 99% of the time. And from our internal code monitoring, its these 99% that's has the problem. >_<
I can't recall the talk reference for this (but definitely know it's real) so if you know where it's from. It would be good to add here for others to learn.
I replied to this, but I don't see the reply here. Really weird.
Anyways here are two resources that talk about how V8 handles arrays:
We're a place where coders share, stay up-to-date and grow their careers.
We strive for transparency and don't collect excess data.