Klucze obiektu zwykłego muszą być łańcuchami, a Map
klucz może zawierać klucze dowolnego typu.
Ale w praktyce mam z tego niewiele pożytku. W prawie wszystkich przypadkach używam ciągów jako kluczy. I prawdopodobnie new Map()
jest wolniejszy niż {}
. Czy jest więc jakiś inny powód, dla którego lepiej byłoby użyć Map
zamiast zwykłego obiektu?
javascript
ecmascript
es6
kalus
źródło
źródło
map.set('foo', 123)
wykonujesz szybciej niżobj.foo = 123
? Jeśli tak, to bardzo zaskakująceOdpowiedzi:
Istnieje kilka powodów, dla których wolę używać
Map
s niż zwykłych obiektów ({}
) do przechowywania danych środowiska wykonawczego (pamięci podręcznych itp.):.size
właściwość informuje mnie, ile wpisów istnieje na tej mapie;.clear()
,.forEach()
itp;Co drugi przypadek, taki jak przekazywanie argumentów funkcji, przechowywanie konfiguracji itp., Wszystkie są zapisywane przy użyciu prostych obiektów.
Pamiętaj też: nie próbuj zbyt wcześnie optymalizować kodu. Nie trać czasu na porównywanie prostych obiektów z mapami, chyba że w projekcie występują problemy z wydajnością.
źródło
===
:)Map
używa algorytmu SameValueZero. developer.mozilla.org/en-US/docs/Web/JavaScript/…Map
używaniu tego czy tamtego?Nie jestem tego pewien, ale myślę, że wydajność NIE jest powodem do korzystania z Map. Spójrz na tę zaktualizowaną stronę jsperf:
http://jsperf.com/es6-map-vs-object-properties/73
Wygląda na to, że (przynajmniej w przypadku łańcuchów) obiekty są znacznie szybsze niż mapy do podstawowego ustawiania i pobierania.
źródło
Pozostałe odpowiedzi nie wspominają o ostatniej różnicy między obiektami a
Map
s:Cytat z MDN , moje podkreślenie
To był główny powód, dla którego zdecydowałem się wykorzystać
Map
po raz pierwszy w ostatnim projekcie. Miałem normalny obiekt, który musiałem wyświetlić w<table>
, a każda właściwość znajdowała się w określonym rzędzie.Napisałem funkcję przekształcania obiektu w
Map
odpowiedni klucz według kolejności:Następnie mapę można iterować w żądanej kolejności:
Oczywiście jest to nieco wymyślone, ponieważ równie dobrze można wyświetlać podczas iteracji po porządku właściwości bez tworzenia
Map
w tym procesie:Ale jeśli masz szereg takich obiektów i zamierzasz wyświetlać je w wielu miejscach, to najpierw warto je przekonwertować na mapy.
źródło