Подтвердить что ты не робот

Выполнение ключевого поиска в объекте JavaScript

Я только что прочитал этот вопрос: есть ли словари в javascript, например python?

В одном из ответов говорилось, что вы можете использовать объекты JavaScript, такие как словари Python. Это правда? Какова производительность ключевого поиска в объекте? Это O (1)? Добавляет ли ключ к объекту также постоянное время (хеширование)?

4b9b3361

Ответ 1

V8 design docs подразумевают, что поисковые запросы будут, по крайней мере, такими быстрыми, если не быстрее:

Большинство движков JavaScript используют словарическую структуру данных, как хранилище для свойств объекта - для каждого доступа к свойствам требуется динамический поиск для определения местоположения свойства в памяти. Эта подход делает доступ к свойствам в JavaScript, как правило, медленнее, чем доступ к переменным экземпляра на языках программирования, таких как Java и Smalltalk. В этих языках переменные экземпляра расположены при фиксированных смещениях, определенных компилятором из-за фиксированного объекта макет, определенный классом объекта. Доступ - это просто вопрос память или память, часто требующая только одной инструкции.

Чтобы сократить время, необходимое для доступа к свойствам JavaScript, V8 делает не использовать динамический поиск для доступа к свойствам. Вместо этого V8 динамически создает скрытые классы за кулисами. [...] В V8 изменяется объект его скрытый класс при добавлении нового свойства.

Похоже, что добавление нового ключа может быть немного медленнее, хотя из-за создания скрытого класса.

Ответ 2

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

Под капотом JS-движок может применять некоторые методы для оптимизации последующих поисков, но для целей любого алгоритма вы можете предположить O (1).