讓我們來愉快的立一個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ù)