Map
- 鍵值對(Key-Value Pairs):
Map
是一個集合,其中每個元素都是一個鍵值對。鍵(key)可以是任何類型(包括物件和基本類型),值(value)也可以是任何類型。
- 順序:
Map
中的元素是有序的。元素會按照它們被添加到Map
中的順序來保存。
- 迭代:
Map
有多種方法和屬性來迭代或操作集合,包括keys()
,values()
, 和entries()
。
- 繼承:
Map
不繼承自 JavaScript 的 Object,因此它的鍵不會和 Object 原型上的鍵發生衝突。
不會繼承的重點:使用物件使用
toString
時,一般物件會先查找toString
這個鍵,如果找不到才會往上查找prototype.toString
。因此,一般物件不應使用toString
作為鍵,否則會覆蓋掉原本的toString
函式。範例來解釋不繼承自 JavaScript 的 Object意思。
Set
- 僅值(Values):
Set
是一個集合,其中的每個元素都是唯一的值(不是鍵值對)。值可以是任何類型。
- 順序:
Set
中的元素也是有序的。但因為它沒有鍵來與值配對,所以這通常是不太重要的。
- 迭代:
Set
也有方法和屬性來迭代或操作集合,但相對較少。它有一個values()
方法,但因為 Set 是由唯一值組成的,所以它也有一個keys()
方法,實際上與values()
方法等價。
- 不支持鍵值查找: 因為
Set
只存儲值(而不是鍵值對),所以你不能像在Map
中那樣通過鍵來查找或獲取一個值。
共同點
- 唯一性:
Map
的鍵和Set
的值都是唯一的。你不能在同一個Map
中有重複的鍵,也不能在同一個Set
中有重複的值。
- 動態大小: 兩者都可以在運行時動態地添加或刪除元素。
- 高效性能: 兩者都提供了高效的添加、刪除和查找操作。
- 可迭代性: 兩者都是可迭代的,你可以使用
for...of
循環或其他迭代方法(例如forEach
)來迭代它們。
- 內置方法: 兩者都有一系列的內置方法來進行各種操作,例如
add
,delete
,has
,get
,set
等。
- 任意類型的鍵或值: 兩者都可以儲存各種類型的值(包括 Object)。對於
Map
,這也適用於鍵。
根據你的需求,你可以選擇使用
Map
或 Set
。如果你需要儲存鍵值對並進行高效的鍵值查找,則 Map
可能是更好的選擇。如果你只需要一個值的集合並要求集合中的值是唯一的,則 Set
是更好的選擇。