One of the "features" of JavaScript I hate the most is "holey" arrays. If you're unsure what that is, consider the following:
const array = [1, ...
For further actions, you may consider blocking this person and/or reporting abuse
Why does
array[999] = 'HAIL SATAN! ♥'convert the array to a plain object? Is it because of the index or because the special character?The index. The content has no bearing on the matter.
When you poke enough holes into the array, V8 deems it as “sparse enough” to get this treatment.
Tank you for the article. Holey make a better allocation against PACKED one (specially matter when the array get big). Against slower operation and access performance. What's the solution to avoid both pitfalls. Is TypedArrays the solution ? Or they have there pitfalls? Typed arrays aren't HOLEY.
Great one! One quick question: what are the solutions? :-)
The solution is to guard against unbounded inputs when writing to arrays.
You can use
ifstatements to check if the value is within bounds, and throw an error otherwise.Alternatively, a very simple solution is to use the
%modulo operator to constrain the index like this:With the method above, any out-of-bounds input will be "wrapped around" in the range of 0:N.
For example, if the length of the array is 20 and you supply 10:
10 % 20 = 10, so nothing really changes when the supplied input is within bounds.But if you supply an out-of-bounds index, say 25:
25 % 20 = 5, and it remains within bounds.It's worthy to note that this approach also guards against negative inputs, because
-25 % 20equals 15.Edit: Fixed my numbers. Still waiting on my coffee, sorry.
Great article! Good to know it, thanks!
Thanks for sharing such a valuable information ❤️