Ключи простого объекта должны быть строками, а Map
ключи могут иметь ключи любого типа.
Но я практически не пользуюсь этим на практике. В любом случае я почти всегда использую строки в качестве ключей. И, вероятно new Map()
, медленнее, чем {}
. Так есть ли какая-то другая причина, почему может быть лучше использовать Map
вместо простого объекта?
javascript
ecmascript
es6
Каллум
источник
источник
map.set('foo', 123)
выступили быстрее, чемobj.foo = 123
? Если это так, это очень удивительноОтветы:
Есть несколько причин, по которым я предпочитаю использовать
Map
s вместо простых объектов ({}
) для хранения данных времени выполнения (кэши и т. Д.):.size
Свойство позволяет мне знать , сколько существуют записи в этой карте;.clear()
,.forEach()
и т.д.;Все остальные случаи, такие как передача аргументов функций, хранение конфигураций и т. Д., Все пишутся с использованием простых объектов.
Также помните: не пытайтесь оптимизировать свой код слишком рано. Не тратьте свое время на тестирование простого объекта по сравнению с Картами, если ваш проект не испытывает проблем с производительностью.
источник
===
:)Map
использует алгоритм SameValueZero. developer.mozilla.org/en-US/docs/Web/JavaScript/…Map
использовать то или это?Я не уверен в этом, но я думаю, что производительность НЕ является причиной для использования Карт. Взгляните на эту обновленную страницу jsperf:
http://jsperf.com/es6-map-vs-object-properties/73
Похоже (по крайней мере, при работе со строками) объекты намного быстрее, чем карты для базовой установки и получения.
источник
Другие ответы не упоминают одно последнее различие между объектами и
Map
s:Цитата из МДН , акцент мой
Это было главной причиной, которую я решил использовать
Map
впервые в недавнем проекте. У меня был нормальный объект, который мне нужно было отобразить в a<table>
, причем каждое свойство находилось в определенной строке.Я написал функцию для преобразования объекта в
Map
соответствии с желаемым порядком клавиш:Затем карта может быть перебрана в желаемом порядке:
Конечно, это немного надумано, так как можно было бы отображать итерацию по порядку свойств без создания
Map
в процессе:Но если у вас есть массив таких объектов и вы собираетесь отображать их во многих местах, то сначала имеет смысл преобразовать их все в карты.
источник