成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

ES6 - WeakSet

Jiavan / 1599人閱讀

摘要:這幾意味著,在初始化和調(diào)用的時(shí)候,都只能傳入對(duì)象類(lèi)型的元素。如果給方法傳入非對(duì)象類(lèi)型,會(huì)拋出錯(cuò)誤。

在我們進(jìn)入在WeakSet的使用之前,我們先來(lái)看一個(gè)用Set來(lái)存儲(chǔ)對(duì)象引用的例子:

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

以上代碼,我們存儲(chǔ)了一個(gè)對(duì)象的引用key,但是隨后我們通過(guò)key = null清楚了對(duì)象的引用,但是隨后我們查看set.size依然得到1,且依然可以通過(guò)把set展開(kāi)到數(shù)組取到原本已經(jīng)被我們清除了引用的key。
之所以會(huì)出現(xiàn)這樣的結(jié)果是因?yàn)?,Set存儲(chǔ)的是對(duì)象的強(qiáng)引用,雖然在代碼的其他地方已經(jīng)不存在對(duì)此變量的引用,但是javaScript的垃圾回收機(jī)制依然不會(huì)回收這段地址。這種情況,就會(huì)造成我們常說(shuō)的內(nèi)存泄漏。

而WeakSet就是為了解決上面的問(wèn)題而存在的,相比Set,WeakSet存的是對(duì)象的弱引用。意思就是,如果在代碼的其他地方已經(jīng)不存在任何引用,那么WeakSet也不會(huì)再保留這個(gè)引用,這樣就可以被垃圾回收了。

了解了以上WeakSet的存在背景,現(xiàn)在就來(lái)看一下WeakSet的一些特性和使用:
一:初始化WeakSet
一:通過(guò)new WeakSet()初始化

let weakSet = new WeakSet();

二:傳入可迭代對(duì)象初始化

let key1 = {};
let key2= {};
let weakSet = new WeakSet([key1, key2]);

二:WeakSet的add(),delete(),has()方法
區(qū)別于Set,WeakSet只有三個(gè)方法可用,分別是

1: add() 添加一個(gè)元素
2: delete() 刪除一個(gè)元素
3: has() 查詢某個(gè)元素是否存在

它們的功能和用法與Set所對(duì)應(yīng)的三個(gè)方法一致,只是在參數(shù)類(lèi)型上有所限制,即:
以上三個(gè)方法都不能傳入基本數(shù)據(jù)類(lèi)型,只能傳入對(duì)象類(lèi)型。 我們先來(lái)看一下代碼示例:

let key1 = {name: "may"};
let key2= {name: "april"};

let weakSet = new WeakSet([key1, key2]);
console.log(weakSet.has(key1)); // true

weakSet.delete(key2);

let key3 = {name: "mike"};
let result = weakSet.add(key3);
console.log(result);

最后打印 console.log(result),我們得到結(jié)果:

WeakSet {{…}, {…}}
__proto__: WeakSet
[[Entries]]: Array(2)
0:
value: {name: "may"}
1:
value: {name: "mike"}
length: 2

可以看到因?yàn)檎{(diào)用delete(key2), 所以我們最后的結(jié)果里面沒(méi)有了key2。

三:WeakSet與Set的區(qū)別

WeakSet與Set除了存儲(chǔ)的分別是對(duì)象的弱引用和強(qiáng)引用之外,還有很多差別,下面我們就來(lái)總結(jié)一下WeakSet的特性:

1: WeakSet只能不能存儲(chǔ)基本數(shù)據(jù)類(lèi)型。這幾意味著,在初始化和調(diào)用add()的時(shí)候,都只能傳入對(duì)象類(lèi)型的元素。
2: 如果給add()方法傳入非對(duì)象類(lèi)型,會(huì)拋出錯(cuò)誤。給delete()和has()傳入非對(duì)象類(lèi)型參數(shù),則總是返回false。
3: WeakSet不可迭代,所以所有迭代的場(chǎng)景都不能使用,例如for-of, 展開(kāi)運(yùn)算符等
4: WeakSet不暴露任何的迭代器,例如keys(),values(),這也是其不能被迭代的原因
5: WeakSet不支持forEach()方法
6: WeakSet不支持size屬性

以上就是關(guān)于WeakSet的基本特性和功能。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/106147.html

相關(guān)文章

  • es6基礎(chǔ)0x013:WeakSet

    摘要:概述和差不多,但是有一些不同只能存儲(chǔ)對(duì)象,不能存儲(chǔ)任意值不可迭代是弱引用,也就是如果沒(méi)有變量引用內(nèi)的值,很容易被回收初始化因?yàn)橹荒艽鎯?chǔ)對(duì)象,所以這里我想只能傳入類(lèi)似對(duì)象數(shù)組之類(lèi)的東西對(duì)象數(shù)組添加判斷是否已經(jīng)有了刪除弱引用特性后輸出,可以看到 0x000 概述 WeakSet和Set差不多,但是有一些不同: WeakSet只能存儲(chǔ)對(duì)象,不能存儲(chǔ)任意值 WeakSet不可迭代 We...

    trigkit4 評(píng)論0 收藏0
  • 帶你入門(mén) JavaScript ES6 (五) 集合

    摘要:一概述集合是引入的新的內(nèi)置對(duì)象類(lèi)型,其特點(diǎn)同數(shù)學(xué)意義的集合,即集合內(nèi)所有元素不重復(fù)元素唯一。數(shù)組集合對(duì)比數(shù)組和集合,數(shù)組可以加入重復(fù)數(shù)據(jù),而集合的所有元素是唯一的不允許重復(fù)。因此,適合臨時(shí)存放一組對(duì)象,以及存放跟對(duì)象綁定的信息。 本文同步帶你入門(mén) 帶你入門(mén) JavaScript ES6 (五) 集合,轉(zhuǎn)載請(qǐng)注明出處。 前面我們學(xué)習(xí)了: for of 變量和擴(kuò)展語(yǔ)法 塊作用域變量和解構(gòu)...

    BetaRabbit 評(píng)論0 收藏0
  • es6 Set和WeakSet

    摘要:返回一個(gè)布爾值,表示該值是否為的成員。清除所有成員,沒(méi)有返回值。上面代碼中,方法返回的遍歷器,同時(shí)包括鍵名和鍵值,所以每次輸出一個(gè)數(shù)組,它的兩個(gè)成員完全相等。因此,適合臨時(shí)存放一組對(duì)象,以及存放跟對(duì)象綁定的信息。 Js大部分歷史時(shí)期都只存在一種集合類(lèi)型,也就是數(shù)組類(lèi)型。數(shù)組在 JS 中的使用正如其他語(yǔ)言的數(shù)組一樣,但缺少更多類(lèi)型的集合導(dǎo)致數(shù)組也經(jīng)常被當(dāng)作隊(duì)列與棧來(lái)使用。數(shù)組只使用了數(shù)值...

    marser 評(píng)論0 收藏0
  • 細(xì)說(shuō)es6中的Set和Map

    摘要:返回一個(gè)布爾值,表示該值是否為的成員。返回鍵名的遍歷器返回鍵值的遍歷器返回鍵值對(duì)的遍歷器使用回調(diào)函數(shù)遍歷每個(gè)成員需要特別指出的是,的遍歷順序就是插入順序。該數(shù)組的所有成員,都會(huì)自動(dòng)成為實(shí)例對(duì)象的成員。這意味著,數(shù)組的成員只能是對(duì)象。 1.Set ES6 提供了新的數(shù)據(jù)結(jié)構(gòu) Set。它類(lèi)似于數(shù)組,但是成員的值都是唯一的,沒(méi)有重復(fù)的值。Set 本身是一個(gè)構(gòu)造函數(shù),用來(lái)生成 Set 數(shù)據(jù)結(jié)構(gòu)...

    Ryan_Li 評(píng)論0 收藏0
  • 初探ES6中的Set和weakSet

    摘要:對(duì)象允許你存儲(chǔ)任何類(lèi)型的唯一值,無(wú)論是原始值或者是對(duì)象引用。不能重復(fù)獲取的值方法用來(lái)向一個(gè)對(duì)象的末尾添加一個(gè)指定的值。 Set 對(duì)象允許你存儲(chǔ)任何類(lèi)型的唯一值,無(wú)論是原始值或者是對(duì)象引用。(不能重復(fù)) const set1=new Set([1,2,3,4,5,6]); console.log(set1); //Set { 1, 2, 3, 4, 5, 6 } 獲取set的值 cons...

    afishhhhh 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<