0
ES6標準的新功能之一是Map類,用於創建key:value集合的數據。好吧,對。但是,爲什麼Javascript需要這樣一個類? JS對象表示法實際上還是一個關鍵的數據值集合嗎?那麼,有什麼區別?ES6中的Map類需要什麼?
ES6標準的新功能之一是Map類,用於創建key:value集合的數據。好吧,對。但是,爲什麼Javascript需要這樣一個類? JS對象表示法實際上還是一個關鍵的數據值集合嗎?那麼,有什麼區別?ES6中的Map類需要什麼?
從MDN:
對象和地圖相比
對象是在類似於地圖都讓你設置鍵的值,檢索這些值,刪除鍵,並檢測是否東西存儲在一個密鑰。由於這個原因(並且因爲沒有內置的替代品),對象歷史上被用作地圖;然而,對象和地圖之間存在重要的區別,使得使用地圖更好:
- 對象有一個原型,所以在地圖中有默認的鍵。自ES5以來,可以通過使用
map = Object.create(null)
來繞過這個問題,但很少完成。- 對象的鍵是字符串和符號,在那裏他們可以是用於地圖的任何值。
- ,而你不得不手動跟蹤大小的一個對象,您可以輕鬆獲得地圖的大小。
這並不意味着你應該在任何地方使用地圖,在大多數情況下仍然使用對象。地圖實例只對集合有用,並且您應該考慮將您的代碼調整到以前使用此類對象的位置。對象應作爲記錄,使用字段和方法。 如果你還是不知道該使用哪一個,問自己以下問題:
- 是關鍵通常是未知的,直到運行時,你需要動態地看他們呢?
- 是否所有的值都具有相同的類型,並且可以互換使用?
- 你需要不是字符串的鑰匙嗎?
- 是否經常添加或刪除鍵值對?
- 你有一個隨意(容易改變)的鍵值對嗎?
- 集合迭代了嗎?
這些都是要用於集合的地圖跡象。相反,如果你有一個固定數量的鍵,分別對它們進行操作,並區分它們的用法,那麼你需要一個對象。
對我個人而言,最重要的是支持任何類型的值,而不僅僅是字符串。
你至少可以複製的複製和粘貼的格式。這篇文章有很多更清晰的子彈列表。 –
是的,只是編輯:) –
最好是在最初發布時,而不是之後的編輯。 (這一般適用於回答。) –