1. 程式人生 > >Set集合與Map集合(七)

Set集合與Map集合(七)

// Set集合與Map集合                  // Set集合         // Set型別是一種無序列表,其中含有一些相互獨立的非重複值         // Set集合轉換為陣列         /*let set = new Set([1, 4, 2, 3, 3, 3, 4, 5]), array = [...set];

        console.log(array)

        // 注: 將物件儲存在Set的例項與儲存在變數中完全一樣,只要Set例項中的引用存在,垃圾回收機制就不能釋放該物件中的記憶體空間         let set = new Set(),             key = {};         set.add(key);         console.log(set.size);   // 1         // 移除原始的引用         key = null;         console.log(set.size); //1

        // 重新取出原始引用         key = [...set][0]; */

        // WeakSet (弱引用Set集合)         // 只儲存物件的弱引用,並且不可以儲存原始值。集合中的弱引用如果是物件唯一的引用,則會被回收並釋放相應記憶體                  /*let set = new WeakSet();         set.add(12);         console.log(set.has(12)) // 報錯*/                  // Set 與  WeakSet 的區別         // 1. 在WeakSet 的例項中,如果向add()、has()和delete()這三個方法傳入非物件引數都會導致程式報錯         // 2. WeakSet 集合不可迭代,所以不能被用於for-of 迴圈         // 3. WeakSet 集合不暴露任何迭代器(例如keys() 和 values()方法), 所以無法通過程式本身來檢測其中的內容         // 4. WeakSet 集合不支援forEach() 方法         // 5. WeakSet 集合不支援size()方法

                          // Map 集合         // 鍵名的等價性判斷都是通過Object.is() 方法實現的                  // map建構函式傳入陣列初始化一個Map集合         // let map = new Map([["name", "wujiahui"], ["age", "20"]]);                  /*let map = new Map(),             key =  { name: "wujiahui"}

        map.set(key, "123");         map.set('name', 'wujiahui')         console.log(map.size)         map.forEach(function(value, key, ownerMap){             console.log(key + " " + value)         })         key = null;

        console.log(map.size)

        map.forEach(function(value, key, ownerMap){             console.log(key + " " + value)         })*/