天天看點

ES6裡面的Set和Weak Set

1》Set

Set是一種有序的清單,其中包含的是一些互相獨立的非重複的值。

Set具有的方法:

1.添加  add()方法

let set = new Set();
set.add(1);
console.log(set.size);  //1
           

a.這裡需要注意的就是set集合中,不會盡行強制類型的轉換,所有5和"5"可以作為兩個獨立的元素存在。

b.如果你給set集合裡面添加幾個重複的值的話,這裡隻會儲存重複值中的一個。

2.删除 delete()方法

delete的方法和add方法的使用方法是一樣的

let set = new Set();
set.add(1);
console.log(set.size);  //1
set.delete(1);
console.log(set.size); //0
           

3。清除裡面的所有的元素:   clear()

用法同上,隻不過這裡不用傳入參數了

4. 判斷集合裡面是否包含哪個元素  has()

let set = new Set();
set.add(1);
console.log(set.has(1));  //true
           

5.如果你想對集合裡面的每一個元素進行操作那麼forEach()方法就會起到很大的作用了

forEach()接受3個參數:

        1.Set集合下一次索引的位置

        2 和第一個參數保持一緻

        3被周遊的Set集合本身

let set = new Set([1,2]);
set.forEach(function(value,key,ownerSet){
     console.log(key+" "+value);
     console.log(ownerSet==set);
});
           

天呀!如果我不想對set集合裡面的左右的元素進行操作,我隻想對其中的一個進行操作,那該怎麼呢?

ES6裡面的Set和Weak Set

我們可以把set與數組的互相轉化

let set  = new Set([1,2,3,4,5,6,7]);
let value = [...set];
console.log(value);
           

你也看到了,其中将數組當作參數傳進去就可以轉化為set了,利用擴充操作符就可以将set轉化為數組。

》2 WeakSet

支援的方法add(),delete(),has()這3個方法。

現在就來說說其中的弱展現在哪裡?

let set1 = new WeakSet();
     set1.add(1);   //報錯
           

這裡展現的就是其中的第一弱:在Weak Set裡面傳進去的參數必須是非null類型的對象。

let set = new Set();
key = {};
set.add(key);
console.log(set.size);  //1
key = null;
console.log(set.size);  //1



// 現在是 WeakSet 
let set1 = new WeakSet();
key1 = {};
set1.add(key1);
console.log(set1.has(key1));  //true
key1 = null;
console.log(set1.has(key1));  //false
           

這裡展現的就是其中的的弱引用了。對于Set來說将鍵設定為null之後,垃圾資源回收筒并沒有回收,我們還是能通路到,但是對于WeakSet來說垃圾回收機制就回收了。這裡展現的就是它的第二弱了。

再有就是其中WeakSet的方法比較少。

最後在這裡留一個小問題:試着利用set的特性,寫一個方法實作去掉數組裡面的重複的元素。如果寫不出來的話,看看我的下一篇部落格吧!Map 和 WeakMap

es6