ES6新增了四類數據結構:分別是
Set
、WeakSet
、Map
、WeakMap
.數組
let nums=new Set([1,2,3,4,3,2]);//[1,2,3,4] nums.add(2);//[1,2,3,4] nums.add('2');//[1,2,3,4,'2'] nums.add({});//[1,2,3,4,'2',{}] Set添加元素時不會發生類型轉換, nums.add({});//[1,2,3,4,'2',{},{}] Set添加的對象總不相等
// ① Set.prototype.constructor:返回Set的構造函數 // ② Set.prototype.size:返回Set實例的成員個數
①Set.add(value)
:向Set實例添加值value,返回Set結構自己 ;
②Set.delete(value)
:向Set實例刪除值value,返回boolean, 成功爲true,失敗返回false;
③Set.has(value)
:檢查Set實例是否含有值value,返回boolean,包含返回true,不包含返回false
④Set.clear()
:清楚Set實例的全部成員,無返回值;數據結構
⑤Set.keys()
:返回鍵名的遍歷器;
⑥Set.values()
:返回鍵值的遍歷器;
⑦Set.entries()
:返回鍵值對的遍歷器;
⑧Set.forEach((value,key)=>{},thisObj)
:使用回調函數遍歷每一個成員函數
// ①數組去重 let arr=[1,2,3,4,3,2,1]; let b=[...arr];//[1,2,3,4] let a=Array.from(new Set(arr));//[1,2,3,4] // ②數組運算 let arr1=new Set([1,2,3,4]); let arr2=new Set([3,4,5,6]); let union=new Set([...arr1,...arr2]);//[1,2,3,4,5,6] let intersect=new Set([...arr1].filter(value=>b.has(value)));//[3,4] let diffrence=new Set([...arr1].filter(value=>!b.has(value)));//[1,2]
WeakSet中的對象都是弱引用,即垃圾回收機制不考慮WeakSet對該對象的引用;this
弱引用,即當一個WeakSet實例的成員引用對象A時,當其餘對象不在引用對象A,JS的垃圾回收機制便會自動回收該對象佔用的內存,不考慮WeakSet實例是否還在引用;弱引用的對象隨時可能消失,沒法保證成員的存在,所以WeakSet相比較Set數據結構,沒有clear()方法、沒有size屬性、也沒有遍歷方法;prototype
ES5中對象(Object)本質上都是簡直對的集合(Hash結構),但只能用字符串做爲鍵名;Map對象能夠用對象做爲鍵名,實現真正的值-值對;對於鍵名、鍵值均爲對象的Map數據,在內存中存儲時,其實是兩個對象的索引值對索引值的對應關係映射;code
Map.size
返回Map實例成員的總數;方法:操做方法(5種)+遍歷方法(4種)
①Map.set(key,value)
:設置key值對應的值,若是key存在,則覆蓋原有值;
②Map.get(key)
:獲取鍵名爲key的鍵值;
③Map.has(key)
:檢查鍵名key是否存在Map實例中,返回boolean值,若存在返回true,不存在返回false;
④Map.delete(key)
:刪除鍵名爲key的屬性,返回boolean值,若刪除成功返回true,失敗返回false;
⑤Map.clear()
:清除Map實例的全部成員,無返回值
⑥Map.keys()
:返回鍵名的遍歷器
⑦Map.values()
:返回鍵值的遍歷器
⑧Map.entries()
:返回全部成員的遍歷器
⑨Map.forEach((value,key,map)=>{},thisObj)
:遍歷Map的全部成員對象
Map 與其餘數據類型之間相互轉換
。。。
。。。索引