JavaScript 是一种动态语言,它可以通过对象字面量来创建对象,但在某些情况下,使用 Map/Set/WeakMap/WeakSet 数据结构会更加高效和便捷。这些数据结构都是 ES6 引入的,而在 ES8 中,它们都得到了进一步的改进和完善。
Map
Map 是一种以键值对形式存储数据的数据结构,其中键和值可以是任意类型的数据。Map 中的键是唯一的,而值则可以重复。Map 提供了一些常用的方法,如 set、get、has、delete 和 clear 等。
创建 Map
可以使用 Map 构造函数来创建一个空的 Map 对象:
----- --- - --- ------
也可以在创建时添加键值对:
----- --- - --- ----- -------- ---------- -------- ---------- -------- --------- ---
Map 方法
set
set 方法用于向 Map 中添加键值对:
--------------- ----------
get
get 方法用于获取指定键的值:
----------------------------- -- -- ------
has
has 方法用于判断是否存在指定键:
----------------------------- -- -- ----
delete
delete 方法用于删除指定键值对:
-------------------
clear
clear 方法用于清空 Map 中的所有键值对:
------------
Map 遍历
Map 提供了三种遍历方法:keys、values 和 entries。其中,keys 方法返回 Map 中所有键的迭代器,values 方法返回 Map 中所有值的迭代器,而 entries 方法返回 Map 中所有键值对的迭代器。
--- ------ --- -- ----------- - ----------------- - --- ------ ----- -- ------------- - ------------------- - --- ------ ----- ------ -- -------------- - -------------------- ----------- -
Set
Set 是一种不重复的数据集合,其中的元素可以是任意类型的数据。Set 提供了一些常用的方法,如 add、has、delete 和 clear 等。
创建 Set
可以使用 Set 构造函数来创建一个空的 Set 对象:
----- --- - --- ------
也可以在创建时添加元素:
----- --- - --- -------------- --------- -----------
Set 方法
add
add 方法用于向 Set 中添加元素:
------------------
has
has 方法用于判断 Set 中是否存在指定元素:
------------------------------- -- -- ----
delete
delete 方法用于删除指定元素:
---------------------
clear
clear 方法用于清空 Set 中的所有元素:
------------
Set 遍历
Set 提供了三种遍历方法:keys、values 和 entries。其中,keys 方法返回 Set 中所有元素的迭代器,values 方法返回 Set 中所有元素的迭代器,而 entries 方法返回 Set 中所有元素的迭代器(因为 Set 中的元素没有键,所以 entries 方法返回的是 [value, value] 数组)。
--- ------ --- -- ----------- - ----------------- - --- ------ ----- -- ------------- - ------------------- - --- ------ ----- ------ -- -------------- - -------------------- ----------- -
WeakMap
WeakMap 与 Map 类似,也是一种以键值对形式存储数据的数据结构,但其中的键必须是对象,而值可以是任意类型的数据。WeakMap 中的键是弱引用的,即当键对象被垃圾回收时,与之关联的键值对也会自动被删除。WeakMap 提供了一些常用的方法,如 set、get、has 和 delete 等。
创建 WeakMap
可以使用 WeakMap 构造函数来创建一个空的 WeakMap 对象:
----- ------- - --- ----------
也可以在创建时添加键值对:
----- ---- - --- ----- ---- - --- ----------------- ---------- ----------------- ----------
WeakMap 方法
set
set 方法用于向 WeakMap 中添加键值对:
----- ---- - --- ----------------- ----------
get
get 方法用于获取指定键的值:
------------------------------- -- -- ------
has
has 方法用于判断是否存在指定键:
------------------------------- -- -- ----
delete
delete 方法用于删除指定键值对:
---------------------
WeakMap 的应用
WeakMap 的一个常见应用是用于存储对象的私有属性,因为这些属性只能通过对象本身来访问,而外部代码无法访问。
----- ------------ - --- ---------- ----- ------- - ------------- - ---------------------- - ------------- --------- ------------- -------- --- - ----------------- - ------ ------------------------------------ - ---------------------- - ----------------------------------- - ------ - - ----- --- - --- ---------- ----------------------------------- -- -- ------ ------------------------ --------- ----------------------------------- -- -- --- ------
WeakSet
WeakSet 与 Set 类似,也是一种不重复的数据集合,但其中的元素必须是对象。WeakSet 中的元素是弱引用的,即当元素对象被垃圾回收时,该元素也会自动被删除。WeakSet 提供了一些常用的方法,如 add、has 和 delete 等。
创建 WeakSet
可以使用 WeakSet 构造函数来创建一个空的 WeakSet 对象:
----- ------- - --- ----------
也可以在创建时添加元素:
----- ---- - --- ----- ---- - --- ------------------ ------------------
WeakSet 方法
add
add 方法用于向 WeakSet 中添加元素:
----- ---- - --- ------------------
has
has 方法用于判断 WeakSet 中是否存在指定元素:
------------------------------- -- -- ----
delete
delete 方法用于删除指定元素:
---------------------
WeakSet 的应用
WeakSet 的一个常见应用是用于存储对象的标记,例如用于判断某个对象是否已经被处理过。
----- ------------ - --- ---------- -------- ------------------ - -- ----------------------- - ------- - -- ---- ---------------------- -
总结
Map/Set/WeakMap/WeakSet 数据结构是 JavaScript 中非常常用的数据结构,它们可以帮助我们更加高效和便捷地存储和处理数据。在使用这些数据结构时,需要注意它们的特点和使用方法,以充分发挥它们的优势。
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/651157db95b1f8cacd9cc6c4