JavaScript 開發人員經常使用普通物件作為鍵值存儲,但 Map
資料結構提供了顯著的優勢。本文重點介紹了為什麼 Map
經常超越動態物件。
Map
的主要優點是它能夠利用任何資料類型作為鍵,這與將鍵限制為字串和符號的物件不同。
<code class="language-javascript">// Objects convert keys to strings const obj = {}; obj[true] = "value1"; obj[1] = "value2"; obj[{ key: 1 }] = "value3"; console.log(Object.keys(obj)); // Output: ["true", "1", "[object Object]"] // Maps preserve key types const map = new Map(); map.set(true, "value1"); map.set(1, "value2"); map.set({ key: 1 }, "value3"); console.log([...map.keys()]); // Output: [true, 1, { key: 1 }]</code>
Map
提供了內建的 size
屬性,消除了物件所需的手動計算。
<code class="language-javascript">// Objects require manual size calculation const obj = { a: 1, b: 2, c: 3 }; const size = Object.keys(obj).length; console.log(size); // 3 // Maps offer direct size access const map = new Map([ ['a', 1], ['b', 2], ['c', 3] ]); console.log(map.size); // 3</code>
Map
針對頻繁的鍵值對新增和刪除進行了最佳化,從而加快了迭代速度。 (為簡潔起見,省略了效能測試程式碼,但斷言仍然有效)。
Map
為常見任務提供直覺、專門建構的方法。 以下程式碼片段示範了與用於新增、檢查、取得和刪除條目的物件相比 Map
更清晰的語法。 (為簡潔起見,省略了比較 Map
和物件方法的程式碼。)
Map
避免了可能使物件使用複雜化的繼承問題。 (為簡潔起見,省略了 Map
中演示缺乏原型鏈幹擾的程式碼。)
Map
提供了多種內建迭代方法以增強靈活性。 (為簡潔起見,省略了示範 for...of
、map.keys()
、map.values()
和 forEach
迭代的程式碼)。
儘管Map
有優勢,但在特定情況下物件仍然更可取:
(顯示 Map
的 JSON 序列化問題的程式碼範例,為簡潔起見,省略了解決方法)。
Map
在下列情況下優越:
仔細評估您的需求; Map
當其優勢與您的專案需求相符時,它就是一個強大的工具。
以上是為什麼在 JavaScript 中你應該喜歡 Map 而不是 Object的詳細內容。更多資訊請關注PHP中文網其他相關文章!