這篇文章主要介紹ES6新數據結構Set與WeakSet怎么用,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
新數據結構Set與WeakSet
1. Set
Set類似于數據,但是成員值都是唯一的。生成Set的方式如下。
var s = new Set();
[1,1,3,3,5,5].map( x => s.add(x) );
console.log(s); //Set {1, 3, 5}沒有重復值喲,如果面試官再讓你編寫數組去重的函數是不是簡單多了?;蛘吣憧梢赃@樣寫。
var set = new Set( [2,2,4,4,6,6] ); //Set {2, 4, 6}
console.log(set);其實,Set作為構造函數使用時,接受的參數不僅可以是數組,任何類數組的對象也可以。Set的成員可以是對象,只是每個對象唯一。
那么,我們如何操縱Set呢。
s.add(val); //為s添加val,返回s s.delete(val); //刪除val,返回表示成功與否的布爾值 s.has(val); //返回表示s是否擁有成員val的布爾值 s.clear(); //清除所有成員
map與filter方法可以作用于數組,也可以用于Set(見第一個代碼塊)。
那么,我們如何遍歷Set呢。
依然是 keys() , values() , entries() , forEach() . 舉例如下(默認情況下Set的鍵與值相同):
var s = new Set();
var ul = document.getElementsByTagName('ul');
[1,1,3,3,5,5].map( x => s.add(x) );
for ( let key of s.keys() ){
console.log(key); //1 , 3, 5
}
for ( let val of s.values() ){
console.log(val); //1, 3,5
}
for ( let item of s.entries() ){
console.log(item[0],item[1]); // 1 1 , 3 3, 5 5
}
for ( let [key,val] of s.entries() ){
console.log(key,val); // 1 1 , 3 3, 5 5
}
s.forEach( function( val , key , ul ){
console.log( this ); //ul
console.log( val , key);
} , ul );可以使用...擴展操作符把Set轉換成數組。
2.WeakSet
WeakSet與Set類似,也是不重復的集合。區別在于:WeakSet的成員只能是對象;WeakSet中的對象是弱引用,即垃圾回收機制不考慮WeakSet對該對象的引用。當其他變量不再引用某對象,其將被垃圾回收機制回收,哪怕這個對象被WeakSet引用。這意味著,WeakSet的成員是無法被引用的,無法遍歷WeakSet。WeakSet只有add、delete和has三個方法。注意:WeakSet沒有size屬性,也沒有forEach方法。
對于WeakSet不能被遍歷,可以這樣解釋。因為其成員都是弱引用,隨時可能消失,遍歷機制無法保證其成員一直存在。
那你可能問,WeakSet用來做什么,答,儲存DOM節點,這樣移除DOM時就可以不用擔心內存泄漏了。
以上是“ES6新數據結構Set與WeakSet怎么用”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。