set
上面的**通過add方法向set結構加入成員,但是set方法不會新增重複的值。
set函式可以接受乙個陣列作為引數,用於初始化。
var set = new set([1,2,3,4,4]);
[...set] //[1,2,3,4]
向set加入值時不會發生型別轉換。set內部判斷兩個值是否相等是使用的類似於(===)的運算子。唯一的列外是nan等於自身(但是精確運算子認為他不等於自身) 。
let set = new set();
set.add({});
console.log(set.size);//1
set.add({});
console.log(set.size);//2
由於兩個空物件不是精確相等的,所以他們被視為兩個值。
遍歷方法:
entries方法返回的遍歷器同時包括鍵名和鍵值,所以每次輸出乙個陣列。
set結構的例項預設可遍歷,其預設遍歷器生成函式就是他的values方法。就是說,可以省略values方法,直接用for of迴圈遍歷set。
set結構的foreach()方法用來對每個成員執行某種操作,沒有返回值。
let set = new set([1,2,3]);
set =new set([...set].map(val => val*2));
weakset
weakset結構和set結構類似,也是不重複的值的集合,但是他和set有兩個區別:weakset的成員只能是物件,而不能是其他型別的值;weakset的物件都是弱引用,即垃圾**機制不考慮他對物件的引用。也就是如果其他成員逗不再引用改物件,那麼**機制會自動**該物件所佔的記憶體。不考慮該物件還存在於weakset中,這個特點意味著無法引用他的成員,因此weakset是不可遍歷的。他是乙個建構函式,可以使用new命令來建立weakset資料結構。
var ws = new weakset();
作為建構函式,weakset可以接收乙個陣列或者類似於陣列的物件作為引數。該陣列的成員都會成為weakset例項物件的成員。
weakset資料結構有3個方法:
weakset.prototype.add(value): 向例項新增新成員;
weakset.prototype.delete(value): 清除例項的指定成員;
weakset.prototype.has(value): 返回乙個布林值,表示某個值是否屬於weakset的例項中。
weakset的乙個用處是儲存dom節點,而不用擔心這個節點從文件移除時會產生記憶體洩漏。
mapmap的鍵實際上是和記憶體繫結的,只要記憶體的位址不一樣,就視為兩個鍵。這就解決了同名屬性碰撞的問題。
另外,雖然nan不嚴格等與自身,但map將其視為同乙個鍵。
size屬性:返回map資料結構的成員總數。
set(key,value): 該方法設定key所對應的鍵值,然後返回整個map結構。
get(key): 讀取key對應的鍵值,如果找不到key,則返回undefined。
has(key): has方法返回乙個布林值,表示某個鍵是否在map資料裡面。
delete(key): 刪除某個鍵,返回布林值,表示是否刪除成功。
clear(): 清除所用成員,沒有返回值。
結合陣列的map方法、filter方法,可以實現map的遍歷和過濾(map本身不具有這兩個方法)。
let map = new map()
.set(1, 'a')
.set(2, 'b')
.set(3, 'c');
map 還有個foreach方法,與陣列的foreach方法類似,也可以完成遍歷。而且該方法還可以接受第二個引數,用於繫結this。
weakmap
weakmap結構與map類似,唯一的區別是它只接受物件作為鍵名(null)除外,而且鍵名所指向的物件不計入垃圾**機制。
該物件設計的目的在於,鍵名是物件的弱引用,所以其所對應的物件可能被自動**。基本上,weakmap的專用場合就是,他的鍵所對應的物件可能會在將來消失,該結構有助於防止記憶體洩漏。
weakmap與map在api上的區別主要是兩個:一是,沒有遍歷操作;也沒有size屬性;二是無法清空。weakmap只有四個方法:get、set、has、delete。weakmap的另乙個用處是部署私有變數。
es6 Set 和Map 資料結構
es6提供了新的資料結構set,它類似於陣列,但是成員的值都是唯一的,沒有重複的值。set 本身是乙個資料結構,用來生成set 資料結構。const s new set 2,3,5,4,5,2,2,2 foreach x s.add x for let i of s 2 3 5 4 set 函式可以...
ES6 Set 和 Map 資料結構
let set new set 1,2,1 console.log set add 增加,返回增加後的set console.log set.add 3 delete 刪除,返回true或false console.log set.delete 2 true has 判斷是否存在某一項,返回true...
es6 set和map資料結構解析
set本身是乙個建構函式,用來生成set資料結構 就像array本身是乙個建構函式,用來生成陣列資料結構 set裡面的值不可以重複 進而引申出陣列去重的方法,new set 1,2,33,3,3,4,set也可以接收物件作為引數 function fin let s newset fin 5和 5 ...