Set 和 WeakSet

Set

  1. ES6提供了新的數據結構Set。它類似于數組,但是成員的值都是唯一的,沒有重復的值。
  2. Set加入值的時候,不會發生類型轉換,所以5"5"是兩個不同的值**。
  3. Set內部判斷兩個值是否不同,使用的算法類似于精確相等運算符(===,這意味著,兩個對象總是不相等的。唯一的例外是NaN等于自身**(精確相等運算符認為NaN不等于自身)。
  4. size屬性:返回Set實例的成員總數。
  5. add(value):添加某個值,返回Set結構本身。
  6. delete(value):刪除某個值,返回一個布爾值,表示刪除是否成功。
  7. has(value):返回一個布爾值,表示該值是否為Set的成員。
  8. clear():清除所有成員,沒有返回值。
  9. keys():返回一個鍵名的遍歷器
  10. values():返回一個鍵值的遍歷器
  11. entries():返回一個鍵值對的遍歷器
var s = new Set([1,2,3]);  // Set {1, 2, 3}
s.keys();                  // SetIterator {1, 2, 3}
s.values();                // SetIterator {1, 2, 3}
s.entries();               // SetIterator {[1, 1], [2, 2], [3, 3]}```
12.  **forEach()**:使用回調函數遍歷每個成員

let set = new Set([1, 2, 3]);
set.forEach((value, key, set) => console.log(value * 2) ) // 2 4 6

13. ***forEach*方法還可以有第二個參數,表示綁定的*this*對象。**

var s = new Set([1,2,3])
s.forEach(function(v){
console.log(this) // [[Window]]
})
s.forEach(function(v){
console.log(this) // [[Object {foo: "bar"}]]
}, {'foo':'bar'})



# WeakSet
1. *WeakSet*結構與*Set*類似,也是不重復的值的集合。
2. *WeakSet*與Set有兩個區別
  * 首先,*WeakSet*的成員只能是對象,而不能是其他類型的值.
  * 其次,*WeakSet*中的對象都是弱引用,即垃圾回收機制不考慮*WeakSet*對該對象的引用,也就是說,如果其他對象都不再引用該對象,那么垃圾回收機制會自動回收該對象所占用的內存,不考慮該對象還存在于*WeakSet*之中。這個特點意味著,無法引用*WeakSet*的成員,因此*WeakSet*是不可遍歷的。
3. 作為構造函數,*WeakSet*可以接受一個數組或類似數組的對象作為參數。(實際上,任何具有*iterable*接口的對象,都可以作為*WeakSet*的參數。)該數組的所有成員,都會自動成為*WeakSet*實例對象的成員。

var a = [[1,2], [3,4]];
var ws = new WeakSet(a);```

  1. add(value):向WeakSet實例添加一個新成員。
  2. delete(value):清除WeakSet實例的指定成員。
  3. has(value):返回一個布爾值,表示某個值是否在WeakSet實例之中
  4. WeakSet沒有size屬性,沒有辦法遍歷它的成員。WeakSet不能遍歷,是因為成員都是弱引用,隨時可能消失,遍歷機制無法保存成員的存在,很可能剛剛遍歷結束,成員就取不到了。WeakSet的一個用處,是儲存DOM節點,而不用擔心這些節點從文檔移除時,會引發內存泄漏。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容