ES6新增數(shù)據(jù)結(jié)構(gòu)WeakSet的用法詳解
WeakSet和Set類(lèi)似,同樣是元素不重復(fù)的集合,它們的區(qū)別是WeakSet內(nèi)的元素必須是對(duì)象,不能是其它類(lèi)型。
特性:
1.元素必須是對(duì)象。
添加一個(gè)number類(lèi)型的元素。
const ws = new WeakSet() ws.add(1)
結(jié)果是報(bào)類(lèi)型錯(cuò)誤。
TypeError: Invalid value used in weak set
添加一個(gè)對(duì)象。
const ws = new WeakSet() var a = {p1:'1', p2:'2'} ws.add(a) console.log(ws.has(a));
添加OK,結(jié)果顯示:
true
可以通過(guò)WeakSet的has方法判斷一個(gè)元素是否已在集合中。
如果不需要存儲(chǔ)元素時(shí),可以使用delete方法刪除元素。
2.弱引用,不被計(jì)入垃圾回收
添加進(jìn)WeakSet的元素對(duì)象,WeakSet不會(huì)對(duì)元素對(duì)像的引用計(jì)數(shù)加1,對(duì)于被添加進(jìn)WeakSet的元素對(duì)象,只要該元素對(duì)象沒(méi)有被除WeakSet以外的其他對(duì)象引用,就會(huì)被垃圾回收釋放,在WeakSet中的該元素對(duì)象自動(dòng)被釋放,不會(huì)出現(xiàn)內(nèi)存泄漏。
因?yàn)檫@一特性,其性能要比map要高,對(duì)于存儲(chǔ)無(wú)順序要求的,不重復(fù)的,臨時(shí)存儲(chǔ)的場(chǎng)景,可以使用它。
const ws = new WeakSet() var a = {p1:'1', p2:'2'} ws.add(a) a = null console.log(ws.has(a));
先將對(duì)象添加到WeakSet中,然后將對(duì)象設(shè)成null,然后再下面的has方法判定時(shí),結(jié)果顯示,表示W(wǎng)eakSet中已經(jīng)不存在該對(duì)象。
false
3.不能遍歷
因?yàn)槠鋵?duì)內(nèi)部的元素對(duì)象是弱引用,隨時(shí)會(huì)被垃圾回收釋放掉,所以其不支持size和forEach等遍歷方法。
總結(jié)
以上所述是小編給大家介紹的ES6新增數(shù)據(jù)結(jié)構(gòu)WeakSet的用法詳解,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
iframe中子父類(lèi)窗口調(diào)用JS的方法及注意事項(xiàng)
本文給大家介紹iframe中子父類(lèi)窗口調(diào)用JS的方法及注意事項(xiàng),介紹的超詳細(xì),需要的朋友快來(lái)學(xué)習(xí)下2015-08-08JavaScript前后端數(shù)據(jù)交互工具ajax使用教程
Ajax(Asynchronous?Javascript?And?XML),即是異步的JavaScript和XML,Ajax其實(shí)就是瀏覽器與服務(wù)器之間的一種異步通信方式2022-10-10解決layer彈出層自適應(yīng)頁(yè)面大小的問(wèn)題
今天小編就為大家分享一篇解決layer彈出層自適應(yīng)頁(yè)面大小的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09JavaScript函數(shù)執(zhí)行、作用域鏈以及內(nèi)存管理詳解
這篇文章主要介紹了JavaScript函數(shù)執(zhí)行、作用域鏈以及內(nèi)存管理的知識(shí),文章內(nèi)容非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01JS面向?qū)ο?、prototype、call()、apply()
那天用到prototype.js于是打開(kāi)看看,才看幾行就滿頭霧水,原因是對(duì)js的面向?qū)ο蟛皇呛苁煜?,于是百?google了一把,最后終于算小有收獲,寫(xiě)此紀(jì)念一下^_^。2009-05-05JS實(shí)現(xiàn)動(dòng)態(tài)添加外部js、css到head標(biāo)簽的方法
這篇文章主要介紹了JS實(shí)現(xiàn)動(dòng)態(tài)添加外部js、css到head標(biāo)簽的方法,涉及javascript針對(duì)頁(yè)面元素屬性動(dòng)態(tài)操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-06-06bootstrap flask登錄頁(yè)面編寫(xiě)實(shí)例
這篇文章主要為大家詳細(xì)介紹了bootstrap flask登錄頁(yè)面編寫(xiě)實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11