Объекты JavaScript как хэши? Является ли сложность больше, чем O (1)?

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

Что все сказано, мне интересно, все ли сложности выполнения записи, чтения, создания и удаления переменных-членов в объектах JavaScript O (1). Если существуют различия в среде (v8 и другие), каковы они?

Ответ 1

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

Я должен был доказать это, запустив тесты производительности:

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

тесты:
http://jsperf.com/objectsashashes/2 (100 ключей)
http://jsperf.com/objectsashashes/3 (100 тыс. ключей)
http://jsperf.com/objectsashashes/ (1 миллион ключей)
http://jsperf.com/objects-as-hashes-300-mil (ключи 10 м)

Примечание. Каждый браузер работает быстрее/медленнее при разных операциях. Это, кажется, меняется между выпусками и из года в год.

Ответ 2

Объекты JavaScript - это хеши. Я не могу представить себе разумную реализацию, которая не обеспечивала бы постоянные CRUD-операции с объектами.

Вы видите конкретные проблемы с этим вопросом?