Там нелинейное пространство и разная вероятность коллизий. В зависимости от числа элементов в том числе, потому что разное число бакетов
Мне в JS странно то, что «объект» – это и объект с полями, и хеш-таблица.
Например, когда я использую объект именно как объект – полей у него будет немного, но они окажутся разных типов.
А когда я использую объект как хеш-таблицу – я собираюсь добавлять в неё очень много (и возможно, удалять), но скорее всего одинаковых типов.
Почему в явном виде через синтаксис нельзя обозначить намерения? Очевидно что там должна быть разная оптимизация.
А так, получается это чисто JIT должен угадывать, что ж я с хешом собрался делать.
В перле вроде точно так же (правда чуть лучше, поскольку у хешей нет неявных полей, и они всегда «чистые»).