Я знаю, что прошло много времени с тех пор, как вышел 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
должны отличаться друг от друга.