004|JavaScript ES6新特性之Map&WeakMap

Map

Map是一個(gè)存儲(chǔ)key-value的容器,對象、基礎(chǔ)類型均可以作為key或value。

var myMap = new Map();

var keyString = 'a string',
    keyObj = {},
    keyFunc = function() {};

// setting the values
myMap.set(keyString, "value associated with 'a string'");
myMap.set(keyObj, 'value associated with keyObj');
myMap.set(keyFunc, 'value associated with keyFunc');

myMap.size; // 3

// getting the values
myMap.get(keyString);    // "value associated with 'a string'"
myMap.get(keyObj);       // "value associated with keyObj"
myMap.get(keyFunc);      // "value associated with keyFunc"

myMap.get('a string');   // "value associated with 'a string'"
                         // because keyString === 'a string'
myMap.get({});           // undefined, because keyObj !== {}
myMap.get(function() {}) // undefined, because keyFunc !== function () {}

一個(gè)對象也可以作為一個(gè)map來使用,那為什么es6還要引入Map?

  1. 對象的key只能是String、Symbol,而Map實(shí)際的key可以是任意類型。
  2. Map類型擁有size屬性。
  3. Map類型中插入的key-value有序。

Map對象遵循iterable協(xié)議,可以使用for...of來遍歷:

var myMap = new Map();
myMap.set(0, 'zero');
myMap.set(1, 'one');
for (var [key, value] of myMap) {
  console.log(key + ' = ' + value);
}
// 0 = zero
// 1 = one

for (var key of myMap.keys()) {
  console.log(key);
}
// 0
// 1

for (var value of myMap.values()) {
  console.log(value);
}
// zero
// one

for (var [key, value] of myMap.entries()) {
  console.log(key + ' = ' + value);
}
// 0 = zero
// 1 = one

Map對象也提供了forEach方法來遍歷:

myMap.forEach(function(value, key) {
  console.log(key + ' = ' + value);
});

Map能夠與Array進(jìn)行轉(zhuǎn)換:

var kvArray = [['key1', 'value1'], ['key2', 'value2']];

var myMap = new Map(kvArray);
myMap.get('key1'); // returns "value1"

console.log(Array.from(myMap)); // 還原為Array
console.log(Array.from(myMap.keys())); // Will show ["key1", "key2"]

WeakMap

WeakMap的特性與Map基本上非常相似,有幾點(diǎn)是不一樣的:

  1. key必須是對象類型,不能是基礎(chǔ)數(shù)據(jù)類型。
  2. key僅是弱引用,意味著可key引向的對象存在被垃圾回收的可能。
  3. WeakMap對象無法被遍歷。

因?yàn)閃eakMap內(nèi)數(shù)據(jù)存在被回收的可能,所以WeakMap特別適用于作為數(shù)據(jù)緩存。

好了,完結(jié)。

什么是WeakSet?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容