<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                [TOC] >[success] # Weak Set集合(弱引用Set集合) 將**對象**存儲在**Set實例**中與存儲在**變量**中完全一樣,只要**Set實例**中的引用存在,**垃圾回收機制就不能釋放該對象的內存空間**,于是之前提到的**Set類型**可以被看作是一個**強引用的Set集合**。舉個例子: ~~~ let set = new Set(), key = {a:1}; set.add(key); console.log(set.size); // 1 key = null // 移除原始引用 console.log(set.size); // 1 // 重新取回原始引用 key = [...set] // [{a:1}] console.log(key[0]) // {a:1} ~~~ 在這個示例中,將變量**key**,設置為**null**時便清除了對初始化對象的引用,但是**Set集合**卻保留了這個引用,你仍然可以使用**展開運算符**將**Set集合**轉換成**數組格式**并從這個**數組**的**首個元素**取出該引用。 大部分情況下這段代碼運行良好,但有時候你會希望**當其他所有引用都不再存在時,讓Set集合中的這些引用隨之消失**,舉個例子,**如果你在Web頁面中通過JavaScript、代碼記錄了一些DOM元素,這些元素有可能被另一段腳本移除,而你不又不希望自己的代碼保留這些DOM元素的最后一個引用。(這個情景被稱作內存泄露)** 為了解決這個問題ES6中引入了另一個類型:**Weak Set集合(弱引用Set集合)**。**Weak Set集合**只儲存**對象**的**弱引用**,并且**不可以儲存原始值**;**集合中的弱引用如果是對象唯一的引用,則會被回收并釋放相應內存**。 >[success] ## 創建Weak Set集合 用**WeakSet**構造函數可以創建**Weak Set** 集合,集合支持**3**個方法:**add()**、**has()**、**delete()**。下面這個示例創建了一個**集合**分別調用這**3**個方法: ~~~ let set = new WeakSet(), key = {}; // 向集合Set中添加對象 set.add(key); console.log(set.has(key)); // true set.delete(key); console.log(set.has(key)); // false ~~~ **Weak Set集合**的使用方式與**Set集合**類似,可以向**集合**中添加引用,從中**移除引用**,也可以**檢查**集合中是否存在指定對象的引用。 也可以調用**WeakSet**構造函數并傳入一個可迭代對象來創建**WeakSet集合**。 ~~~ let key1 = {}, key2 = {}, set = new WeakSet([key1, key2]); console.log(set.has(key1)) // true console.log(set.has(key2)) // true ~~~ 在這個示例中,向**WeakSet構造函數**傳入一個含有**兩個對象的數組**,最終創建一個包含這兩個對象的**Weak Set集合**。請記住,**WeakSet構造函數**不接受任何**原始值**,如果數組中包含其他**非對象值**,程序會拋出錯誤。 >[success] # 兩種Set集合的不同 兩者區別: | 方法或屬性 | Set集合 | weak Set集合 | | --- | --- | --- | | **集合值**的要求 | **基本類型**和**引用類型** | 只能傳入對象 | | **是否可迭代**(循環)**for in** 或者**for of** | **是** | **否** | |**forEach()**|**是**| **否**| |**size屬性**|**是**| **否**| **Weak Set集合**的功能看似**受限**,其實這是為了讓它能夠正確地處理內存中的數據。總之如果你需要**跟蹤對象引用**,你更應該使用**Weak Set集合**而不是普通的**Set集合**。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看