ES6(三)——Set、WeakSet、Map、WeakMap
一、Set的基本使用
在ES6之前,我們存儲數據的結構主要有兩種:數組、對象。
- 在ES6中新增了另外兩種數據結構:Set、Map,以及它們的另外形式WeakSet、WeakMap。
Set是一個新增的數據結構,可以用來保存數據,類似于數組,但是和數組的區別是元素不能重復。
- 創建Set我們需要通過Set構造函數(暫時沒有字面量創建的方式):
我們可以發現Set中存放的元素是不會重復的,那么Set有一個非常常用的功能就是給數組去重。
Set的常見方法:
Set常見的屬性:
- size:返回Set中元素的個數;
Set常用的方法:
-
add(value):添加某個元素,返回Set對象本身;
-
delete(value):從set中刪除和這個值相等的元素,返回boolean類型;
-
has(value):判斷set中是否存在某個元素,返回boolean類型;
-
clear():清空set中所有的元素,沒有返回值;
-
forEach(callback, [, thisArg]):通過forEach遍歷set;
-
另外Set是支持for of的遍歷的
二、WeakSet使用
和Set類似的另外一個數據結構稱之為WeakSet,也是內部元素不能重復的數據結構。
那么和Set有什么區別呢?
- 區別一:WeakSet中只能存放對象類型,不能存放基本數據類型;
- 區別二:WeakSet對元素的引用是弱引用,如果沒有其他引用對某個對象進行引用,那么GC(垃圾回收器)可以對該對象進行回收;
WeakSet常見的方法: - add(value):添加某個元素,返回WeakSet對象本身;
- delete(value):從WeakSet中刪除和這個值相等的元素,返回boolean類型;
- has(value):判斷WeakSet中是否存在某個元素,返回boolean類型;
WeakSet的應用
注意:WeakSet不能遍歷
- 因為WeakSet只是對對象的弱引用,如果我們遍歷獲取到其中的元素,那么有可能造成對象不能正常的銷毀。
- 所以存儲到WeakSet中的對象是沒辦法獲取的;
那么這個東西有什么用呢?
三、Map的基本使用
另外一個新增的數據結構是Map,用于存儲映射關系。 但是我們可能會想,在之前我們可以使用對象來存儲映射關系,他們有什么區別呢?
-
事實上我們對象存儲映射關系只能用字符串(ES6新增了Symbol)作為屬性名(key);
-
某些情況下我們可能希望通過其他類型作為key,比如對象,這個時候會自動將對象轉成字符串來作為key;
那么我們就可以使用Map:
Map的常用方法
Map常見的屬性:
- size:返回Map中元素的個數;
Map常見的方法:
- set(key, value):在Map中添加key、value,并且返回整個Map對象;
- get(key):根據key獲取Map中的value;
- has(key):判斷是否包括某一個key,返回Boolean類型;
- delete(key):根據key刪除一個鍵值對,返回Boolean類型;
- clear():清空所有的元素;
- forEach(callback, [, thisArg]):通過forEach遍歷Map;
- Map也可以通過for of進行遍歷。
四、WeakMap的使用
和Map類型相似的另外一個數據結構稱之為WeakMap,也是以鍵值對的形式存在的。
那么和Map有什么區別呢?
-
區別一:WeakMap的key只能使用對象,不接受其他的類型作為key;
-
區別二:WeakMap的key對對象的引用是弱引用,如果沒有其他引用引用這個對象,那么GC可以回收該對象;
WeakMap常見的方法有四個:
- set(key, value):在Map中添加key、value,并且返回整個Map對象;
- get(key):根據key獲取Map中的value;
- has(key):判斷是否包括某一個key,返回Boolean類型;
- delete(key):根據key刪除一個鍵值對,返回Boolean類型;
WeakMap的應用
注意:WeakMap也是不能遍歷的
- 因為沒有forEach方法,也不支持通過for of的方式進行遍歷;那么我們的WeakMap有什么作用呢?
總結
以上是生活随笔為你收集整理的ES6(三)——Set、WeakSet、Map、WeakMap的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CSS——设置第一个以外的元素样式:no
- 下一篇: 移动端WEB开发之响应式布局(响应式开发