亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

ES6 - WeakSet

Jiavan / 1636人閱讀

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

在我們進入在WeakSet的使用之前,我們先來看一個用Set來存儲對象引用的例子:

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

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

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

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

let weakSet = new WeakSet();

二:傳入可迭代對象初始化

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

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

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

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

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

可以看到因為調(diào)用delete(key2), 所以我們最后的結(jié)果里面沒有了key2。

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

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

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

以上就是關于WeakSet的基本特性和功能。

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

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/106147.html

相關文章

  • es6基礎0x013:WeakSet

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

    trigkit4 評論0 收藏0
  • 帶你入門 JavaScript ES6 (五) 集合

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

    BetaRabbit 評論0 收藏0
  • es6 Set和WeakSet

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

    marser 評論0 收藏0
  • 細說es6中的Set和Map

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

    Ryan_Li 評論0 收藏0
  • 初探ES6中的Set和weakSet

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

    afishhhhh 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<