Я знаю, что прошло много времени с тех пор, как вышел ES6, но я понимаю, что даже в 2023 году некоторые из этих функций javascript широко не используются или не принимаются.

карта

Мы все знаем, что такое объект в Javascript, но много ли мы знаем о Map?

Поскольку JavaScript динамически типизируется и позволяет добавлять или удалять атрибуты в любое время, объект действует как словарь. А Карта?

  • Карта предоставляет методы get, set, has и delete.
  • Принимает любой тип для ключей, а не только строки
  • Предоставляет итератор для удобного использования и поддерживает порядок результатов.
  • Не имеет пограничных случаев с прототипами и другими свойствами, появляющимися во время итерации или копирования.
  • Поддерживает миллионы элементов
  • Это очень быстро

Однако объекты могут быть лучшим вариантом, если вы используете исключительно строковые ключи и хотите добиться максимальной производительности чтения. Это связано с тем, что путь доступа к свойствам значительно быстрее, чем вызов функции Map, а механизмы JavaScript компилируют объекты в классы C++ в фоновом режиме Map().get().

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

Если у вас много операций однократной записи и чтения со строковыми ключами, вы можете использовать object в качестве высокопроизводительного словаря, но для всего остального используйте Map().

Набор

Прежде всего, мы должны уточнить, что такое набор и что такое массив?

В общем, массив — это тип структуры, который содержит блок данных (таких как объекты, числа и т. д.), которые были выделены в последовательную память.

Набор, чаще известный как математическое понятие, представляет собой абстрактный тип данных, который включает только уникальные компоненты или объекты и не требует их распределения в каком-либо определенном порядке по индексу.

Самая большая разница здесь в том, что элементы массива могут дублироваться, но в наборе все они уникальны.

Еще одно ключевое отличие состоит в том, что Array — это коллекция, в которой данные упорядочены по значению индекса. С другой стороны, наборы — это наборы данных, упорядоченные по ключу, а не по индексу.

WeakMap и WeakSet

WeakMap и WeakSet — это две встроенные в JavaScript структуры данных, похожие на Map и Set, но с некоторыми важными отличиями.

WeakMap: WeakMap — это набор пар ключ-значение, где ключи должны быть объектами, а значения могут быть произвольными значениями. Основное различие между WeakMap и Map заключается в том, что ключи в WeakMap слабо удерживаются, что означает, что на них нет сильных ссылок, и они могут быть удалены сборщиком мусора, если не существует другой ссылки на объект. Это делает WeakMap полезным для сценариев, в которых вы хотите связать дополнительные данные с объектом, но не хотите поддерживать этот объект в рабочем состоянии исключительно для целей хранения этих данных.

WeakSet: WeakSet — это набор объектов, каждый из которых может появиться в наборе только один раз. Как и WeakMap, объекты в WeakSet слабо удерживаются, что означает, что они могут быть удалены сборщиком мусора, если на объект нет других ссылок. Это делает WeakSet полезным для сценариев, в которых вы хотите отслеживать набор объектов, но не хотите, чтобы эти объекты оставались активными только для того, чтобы быть в наборе.

И WeakMap, и WeakSet могут быть полезны в определенных сценариях, но они также имеют ограничения. Поскольку ключи и объекты в WeakMap и WeakSet удерживаются слабо, вы не можете перебирать их и нет возможности определить размер коллекции. Кроме того, ключи в WeakMap должны быть объектами, а объекты в WeakSet должны отличаться друг от друга.