關於 JavaScript 的 Map、WeakMap、Set 和 WeakSet
TL;DR
Map v.s. WeakMap
Map 是類似於 Object 的資料結構,都是用鍵與值(key-value pair)的形式儲存資料格式;WeakMap 和 Map 的使用方法相似,但有兩個主要不同的地方,分別是只允許 Object 作為鍵(key)和鍵(key)所指向的對象可以被垃圾回收。
Set v.s. WeakSet
Set 這個數據結構類似陣列,但是裡面的元素值都是唯一,不會有重複的值;WeakSet 和 Set 的使用方法相似,但有兩個主要不同的地方,分別是元素值只能是 Object 和元素可以被垃圾回收。
Map
介紹
Map 是類似於 Object 的資料結構,都是用鍵與值(key-value pair)的形式儲存資料格式。在 JavaScript 當中,Map 本身是一種構造函式,用來生成 Map 這種數據結構,具體做法是 new Map() 來生成實例。
常見操作方法
- 
get(key):透過鍵(key)查詢特定元素,並返回 value 
- 
set(key, value):Map 新增元素 
- 
delete(key):透過鍵(key)從 Map 中移除特定元素 
- 
has(key):判斷 Map 中是否存在某鍵(key) 
- 
size 方法:取得元素數量 
常見遍歷方法(遍歷順序會是置放到 Map 時的順序)
- 
values():返回 Map 中所有元素的值 
- 
keys():返回 Map 中所有元素的鍵 
- 
entries():返回 Map 中所有的元素,返回的會是 [key, value] 的形式 
WeakMap
和 Map 的使用方法相似,但有兩個主要不同的地方:
- 
WeakMap 只允許 Object 作為鍵(key),但是 null 除外。 
- 
WeakMap 中的鍵名是「弱引用」(weak reference),鍵(key)所指向的對象可以被垃圾回收,此時的鍵(key)是無效的。 
Set
介紹
Set 這個數據結構類似陣列,但是裡面的元素值都是唯一,不會有重複的值。在 JavaScript 當中,Set 本身是一種構造函式,用來生成 Set 這種數據結構,具體的做法是透過 new Set() 來生成實例。
常見操作方法
- 
add(value):用來新增值 
- 
delete(value):用來刪除每個 Set 中的值 
- 
has(value):判斷 Set 中是否存在每個值 
- 
size 方法:取得元素數量 
WeakSet
和 Set 的使用方法相似,但有兩個主要不同的地方:
- 
WeakSet 內的元素值只能是 Object(Set 可接受各種資料類型的值)。 
- 
WeakSet 內的元素都是「弱引用」(weak reference),可以被垃圾回收機制回收。 
