ECMAScript6中Set/WeakSet詳解
ES6里加入了一個(gè)新數(shù)據(jù)解構(gòu)Set,和Java的Set一樣,它里面不存放重復(fù)的元素。Set實(shí)現(xiàn)為一個(gè)類,使用時(shí)需要先new。
var s1 = new Set() s1.add(1) s1.add(2) s1.add(3) s1.add(1) var s2 = new Set() s2.add('a') s2.add('a') // 輸出1,2, 3 for (var i of s1 ) { console.log(i) } // 輸出a for (var i of s2 ) { console.log(i) }
上面用Set的add方法添加元素,重復(fù)添加的,不會(huì)存進(jìn)去。
Set構(gòu)造器還可以接受數(shù)組作為參數(shù)傳入
var s3 = new Set([1,2,3,1]) s3.size // 3
可以看到重復(fù)的數(shù)字1依然沒有放進(jìn)去,另外取Set的長度使用size,不是length。
需要注意的是對(duì)于{}或[],它們是兩個(gè)同的對(duì)象
var s4 = new Set() s4.add({}) s4.add({}) s4.size // 2
一、遍歷Set (for of)
var s1 = new Set() s1.add(1) s1.add(2) s1.add(3) // 輸出1,2, 3 for (var i of s1) { console.log(i) }
二、把Set轉(zhuǎn)成數(shù)組
var s1 = new Set() s1.add(1) s1.add(2) // toArray var a1 = Array.from(s1) Array.isArray(a1) // true // or var a1 = [...new Set(s1)]
三、利用Set給數(shù)組去重
function distinct(arr) { return Array.from(new Set(arr)) // return [...new Set(arr)] }
如
Set的屬性
constructor
size
Set的方法
has(val) 判斷是否存在該元素
add(val) 添加元素
delete(val) 刪除元素
clear 刪除所有元素
keys
values
entries
forEach 遍歷元素
map
filter
四、WeakSet
WeakSet和Set一樣都不存儲(chǔ)重復(fù)的元素,但有一些不同點(diǎn)
1. 只存儲(chǔ)對(duì)象類型元素
ws = new WeakSet() ws.add(1)
FF下報(bào)錯(cuò)如下
2. 只有add/delete/clear/has三個(gè)方法,不能遍歷,沒有size屬性等
ws = new WeakSet() ws.size // undefined ws.forEach // undefined
MDN的解釋
WeakSet 對(duì)象中存儲(chǔ)的對(duì)象值都是被弱引用的, 如果沒有其他的變量或?qū)傩砸眠@個(gè)對(duì)象值, 則這個(gè)對(duì)象值會(huì)被當(dāng)成垃圾回收掉. 正因?yàn)檫@樣, WeakSet 對(duì)象是無法被枚舉的, 沒有辦法拿到它包含的所有元素
WeakSet主要用來儲(chǔ)存DOM節(jié)點(diǎn),當(dāng)這些節(jié)點(diǎn)從文檔移除時(shí),不會(huì)引發(fā)內(nèi)存泄漏。
以上所述就是本文的全部內(nèi)容了,希望大家能夠喜歡。
- ECMAScript6 新特性范例大全
- ECMAScript6輪播圖實(shí)踐知識(shí)總結(jié)
- ECMAScript6快速入手攻略
- ECMAScript6中Map/WeakMap詳解
- ECMAScript6塊級(jí)作用域及新變量聲明(let)
- ECMAScript6新增值比較函數(shù)Object.is
- ECMAScript6函數(shù)剩余參數(shù)(Rest Parameters)
- ECMAScript6函數(shù)默認(rèn)參數(shù)
- ECMAScript6的新特性箭頭函數(shù)(Arrow Function)詳細(xì)介紹
- ECMAScript6--解構(gòu)
相關(guān)文章
詳解WordPress開發(fā)中g(shù)et_current_screen()函數(shù)的使用
這篇文章主要介紹了WordPress開發(fā)中g(shù)et_current_screen()函數(shù)的使用,get_current_screen()通常在對(duì)象的實(shí)例化時(shí)使用,需要的朋友可以參考下2016-01-01JS動(dòng)態(tài)創(chuàng)建DOM元素的方法
這篇文章主要介紹了JS動(dòng)態(tài)創(chuàng)建DOM元素的方法,涉及javascript動(dòng)態(tài)創(chuàng)建DOM元素及DOM元素事件綁定與刪除的相關(guān)技巧,需要的朋友可以參考下2015-06-06javascript數(shù)據(jù)結(jié)構(gòu)之多叉樹經(jīng)典操作示例【創(chuàng)建、添加、遍歷、移除等】
這篇文章主要介紹了javascript數(shù)據(jù)結(jié)構(gòu)之多叉樹經(jīng)典操作,簡(jiǎn)單描述了多叉樹的概念,并結(jié)合實(shí)例形式分析了javascript多叉樹的創(chuàng)建、添加、遍歷、移除等常見操作方法,需要的朋友可以參考下2018-08-08JavaScript實(shí)現(xiàn)將Word文檔解析成瀏覽器認(rèn)識(shí)的HTML
這篇文章主要為大家詳細(xì)介紹了如何使用JavaScript實(shí)現(xiàn)將Word文檔解析成瀏覽器認(rèn)識(shí)的HTML,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下2024-02-02JS實(shí)現(xiàn)微信彈出搜索框 多條件查詢功能
這篇文章主要介紹了JS實(shí)現(xiàn)微信彈出搜索框 多條件查詢功能的實(shí)例代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-12-12微信小程序網(wǎng)絡(luò)數(shù)據(jù)請(qǐng)求的實(shí)現(xiàn)詳解
這篇文章主要為大家介紹了微信小程序網(wǎng)絡(luò)數(shù)據(jù)請(qǐng)求的實(shí)現(xiàn)講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08