Sets和Maps《understanding ECMAScipt6》讀書筆記7

讓我們來愉快的立一個Flag:
每周寫一篇文章

Set

介紹

值(value)的集合幅骄,存儲任一類型的唯一值断楷,無論是原始還是引用带污,不能重復

ES5實現(xiàn)的類Set

var set = Object.create(null);
set.foo = true;

if(set.foo){
    //do something
}

存在的問題:

  • 對象的屬性都是String格式唆樊,舉例來說港华,5和'5'是等價的
  • 如果key值為Object對象勾邦,則會調用toString()蚣录,使之變?yōu)?code>[object object]

屬性和方法

添加值時內部使用Object.is()去判斷是否有相同值,如果相同眷篇,則忽略

new Set()

1參包归,可選,參數(shù)為數(shù)組

Set.prototype.add()

1參铅歼,必選(如果沒有則傳入undefined)公壤,加入Set,返回值為該Set

Set.prototype.has()

1參椎椰, 返回值為true或false

Set.prototype.delete()

1參厦幅,需要刪除的值,返回true(刪除成功)或false(刪除失敗)

Set.prototype.clear()

刪除所有值

Set.prototype.forEach()

和數(shù)組的forEach()一樣
2參慨飘,
1參為函數(shù)确憨,函數(shù)有三參,分別為value,value,set,是的瓤的,你沒有看錯休弃,因為Set 是value的集合,所以沒有key
2參為1參中函數(shù)的this

Set.prototype.entries()

返回一個Generate函數(shù), Generate函數(shù).next()后返回值的value的是[value,value]

Set.prototype.values()

返回一個Generate函數(shù), Generate函數(shù).next()后返回值的value的是value

Set.prototype.size

返回Set的長度

小技巧 - 數(shù)組去重

//利用...
const duplication = function(arr){
    return [...new Set(arr)]
}

Weak Sets

使用Set需要注意的是:

存在Set內的值 = 存在對象引用 = set存在時圈膏,無法被垃圾回收

so: Weak Set 出來了

使用Weak Set需要注意的是:

  • Weak Set只存儲數(shù)據(jù)引用塔猾,不能存儲原始類型,添加原始類型會報錯
  • 如果只有Weak Set保存引用時稽坤,垃圾清理機制可以回收它

特性

  • 支持add(),has(),delete()方法
  • 非iterable結構丈甸,不能用for-of循環(huán)
  • 無法從里面取到值
  • 沒有forEach()等遍歷方法
  • 沒有size屬性

Maps

介紹

鍵值對{key:value}的集合糯俗,key存儲任一類型的唯一值,無論是原始還是引用睦擂,不能重復

屬性和方法

添加值時內部使用Object.is()去判斷是否有相同值得湘,如果相同,則忽略

new Map()

1參顿仇,可選淘正,參數(shù)為數(shù)組, 例如:

new Map([ [key1,value1],[key2,value2]);

Map.prototype.set()

1參,必選(如果沒有則傳入undefined,undefined)臼闻,加入Map鸿吆,返回值為該Map

let a = new Map();
a.set(key,value);

Map.prototype.get()

1參,參數(shù)為需要取的值的key,返回鍵值對的value,如果沒有這個key些阅,則返回undefined

Map.prototype.has()

1參伞剑,參數(shù)為需要取的值的key,返回值為true或false

Map.prototype.delete()

1參,需要刪除的值的key市埋,返回true(刪除成功)或false(刪除失敗)

Map.prototype.clear()

刪除所有值

Map.prototype.forEach()

2參黎泣,
1參為函數(shù),函數(shù)有三參缤谎,分別為value,key,Map
2參為1參中函數(shù)的this

Map.prototype.entries()

返回一個Generate函數(shù), Generate函數(shù).next()后返回值的value的是[value,key]

Map.prototype.values()

返回一個Generate函數(shù), Generate函數(shù).next()后返回值的value的是value

Map.prototype.keys()

返回一個Generate函數(shù), Generate函數(shù).next()后返回值的value的是key

Map.prototype.size

返回Map的長度

Weak Maps

使用Weak Map需要注意的是:

  • Weak Map存儲的鍵值對的key必須是對象抒倚,如果不是對象,則拋出異常
  • 如果只有Weak Map保存引用時坷澡,垃圾清理機制可以回收它

特性

  • 支持set(),has(),delete()方法
  • 非iterable結構托呕,不能用for-of循環(huán)
  • 無法從里面取到值
  • 沒有clear()方法
  • 沒有forEach()等遍歷方法
  • 沒有size屬性

使用場景

  • 將DOM元素以Key的值存起來
  • key->Object,value->該Object私有的數(shù)據(jù)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市频敛,隨后出現(xiàn)的幾起案子项郊,更是在濱河造成了極大的恐慌,老刑警劉巖斟赚,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件着降,死亡現(xiàn)場離奇詭異,居然都是意外死亡拗军,警方通過查閱死者的電腦和手機任洞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來发侵,“玉大人交掏,你說我怎么就攤上這事∪婿” “怎么了盅弛?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我熊尉,道長罐柳,這世上最難降的妖魔是什么掌腰? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任狰住,我火速辦了婚禮,結果婚禮上齿梁,老公的妹妹穿的比我還像新娘催植。我一直安慰自己,他們只是感情好勺择,可當我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布创南。 她就那樣靜靜地躺著,像睡著了一般省核。 火紅的嫁衣襯著肌膚如雪稿辙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天气忠,我揣著相機與錄音邻储,去河邊找鬼。 笑死旧噪,一個胖子當著我的面吹牛吨娜,可吹牛的內容都是我干的。 我是一名探鬼主播淘钟,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼宦赠,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了米母?” 一聲冷哼從身側響起勾扭,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎铁瞒,沒想到半個月后妙色,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡精拟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年应狱,在試婚紗的時候發(fā)現(xiàn)自己被綠了羞芍。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖象泵,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情霞篡,我是刑警寧澤歪今,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站践美,受9級特大地震影響洗贰,放射性物質發(fā)生泄漏找岖。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一敛滋、第九天 我趴在偏房一處隱蔽的房頂上張望许布。 院中可真熱鬧,春花似錦绎晃、人聲如沸蜜唾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽袁余。三九已至,卻和暖如春咱揍,著一層夾襖步出監(jiān)牢的瞬間颖榜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工煤裙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留掩完,地道東北人。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓积暖,卻偏偏與公主長得像藤为,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子夺刑,可洞房花燭夜當晚...
    茶點故事閱讀 45,515評論 2 359

推薦閱讀更多精彩內容