Под капотом находятся хэш-таблицы объектов Javascript?

Мне было интересно, как объекты реализованы под капотом в Javascript-двигателях (V8, Spidermonkey и т.д.). Действительно ли они просто Hash Tables? Если да, то как они обрабатывают конфликты?

Ответ 1

Прежде всего, ответ, вероятно, несколько отличается для разных двигателей JS. Кроме того, я предполагаю, что вы специально спрашиваете о хранении имущества; Очевидно, что у объектов тоже есть множество других состояний (очевидное звено цепочки прототипов).

В случае Spidermonkey объекты в основном имеют связанный список пар (имя_прописки, информация о свойствах), пока у них не будет слишком много свойств, хотя я считаю, что они все еще сохраняют связанный список (потому что порядок имеет значение для свойств в JS на практике), но добавьте внешнюю хеш-таблицу, которая отображает имена свойств на записи в связанном списке.

Также могут быть другие причины для переключения на хеш-таблицу; детали не были точно исправлены с течением времени и, вероятно, могут быть изменены в будущем.

Связанные списки и хеш-таблицы на самом деле распределяются между объектами; до тех пор, пока два объекта имеют одинаковые имена свойств и соответствующую информацию о свойствах (которые НЕ включают это значение, для свойств с сохраненным значением) и свойства были установлены в одинаковом порядке, они могут совместно использовать связанный список свойств.

Фактические значения свойств, когда они должны быть сохранены, хранятся в массиве в объекте (или, точнее, в двух массивах; один размещается в строке с объектом, размер которого фиксирован во время создания объекта, один динамически выделяется и изменяется в размере) по мере необходимости для свойств, которые добавляются позже).

Ответ 2

Да, это хэш-таблицы. Я не понимаю вашу часть столкновения, пожалуйста, объясните вторую часть вашего вопроса.