ES6 - Map


Map對象就是簡單的鍵值對映射。其中的鍵和值可以使任意值。(ps : 對象的鍵只能是字符串 )

1.創建Map實例的兩種方法

    //1.
    var map = new Map();
    map.set('one', 1);
    map.set('two', 2);
    map.set('three', 3);
    //...    

    //2.
    var map = new Map([['one',1], ['two', 2], ['three', 3]]);

2.鍵的比較

鍵的比較規則:NaN 是與NaN是相同的(雖然NaN !== NaN),除此之外所有的值都根據'==='判斷。

    var map = new Map();
    map.set(Number('aa111'), 'isNaN');
    map.set(Number('bb222'), 'also is NaN');
    map.get(NaN);    //'also is NaN'

3.Map VS Object

  • 一個對象通常都有自己的原型,所以一個對象總有一個"prototype"鍵。不過,從ES5開始可以使用map = Object.create(null)來創建一個沒有原型的對象。

  • 一個對象的鍵只能是字符串或者Symbols,但一個Map的鍵可以是任意值。

  • 你可以通過size屬性很容易地得到一個Map的鍵值對個數,而對象的鍵值對個數只能手動確認。

4.Map屬性

  • Map.length 屬性length的值為0。

  • Map.prototype 表示Map構造器的原型。允許添加屬性從而應用與所有的Map對象。

5.Map實例 - 所有Map對象的實例都會繼承Map.prototype。

屬性

  • Map.prototype.constructor 返回創建給map實例的構造函數,默認是Map函數。

  • Map.prototype.size 返回Map對象的鍵值對的數量。

    var map = new Map([['one',1], ['two', 2], ['three', 3]]);
    console.log(map.constructor); //function Map() { [native code] }
    console.log(map.size); //3

方法

    //Iterator對象:可以使用for..of進行迭代的對象
    var map = new Map([[1, 'one'],[2, 'two'], [3, 'three']]);

1.Map.prototype.clear() 移除Map對象的所有鍵值對。

    console.log(map.size);    //3
    map.clear();
    console.log(map.size);    //0

2.Map.prototype.delete(key) 移除任何與鍵相關聯的值,並且返回該值,該值在之前會被Map.prototype.has(key)返回為true。之后再調用則返回false。

    console.log(map.has(1));    //true
    map.delete(1);
    console.log(map.has(1));    //false

3.Map.prototype.entries() 返回一個新的Iterator對象,它按插入順序包含了Map對象中每個元素的[key, value]數組。

    console.log(map);    //Map {1 => "one", 2 => "two", 3 => "three"}
    map.entries();
    console.log(map);    //Map {1 => "one", 2 => "two", 3 => "three"}

4.Map.prototype.forEach(callbackFn[, thisArg]) 按插入順序,為Map對象里的每一鍵值對調用一次callbackFn函數。如果為forEach提供了thisArg,他將在每次回調函數中作為this值。

    map.forEach(function(value, key, mapObj) {
        console.log(value + '---' + key + '---' + mapObj);
        //value - Map對象里每一個鍵值對的值
        //key - Map對象里每一個鍵值對的鍵
        //mapObj - Map對象本身
        console.log(this); //this === window
    });

    map.forEach(function(value, key, mapObj) {
        console.log(value + '---' + key + '---' + mapObj);
        console.log(this);    //this === map
    }, map)

5.Map.prototype.get(key) 返回鍵對應的值,如果不存在,則返回undefined。

    map.get(1); //'one'

6.Map.prototype.has(key) 返回一個布爾值,表示Map實例是否包含鍵對應的值。

    map.has(1); // true
    map.has(5); //false

7.Map.prototype.keys() 返回一個新的Iterator對象,它按插入順序包含了Map對象中每個元素的鍵。

    map.keys();    //MapIterator {1, 2, 3}

8.Map.prototype.set(key, value) 設置Map對象中鍵的值,返回該Map對象。

    console.log(map.has(4));    //false
    map.set(4, 'four');
    console.log(map.has(4))    //true

9.Map.prototype.values() 返回一個新的Iterator對象,它按插入順序包含了Map對象中每個元素的值。

    map.values(); //

6.使用for..of方法迭代映射

    var map = new Map();
    map.set(1, 'one');
    map.set(2, 'two');
    for (var [key, value] of map) {
        console.log(key + '---' + value);
    }
    // 1 --- one 2 --- two
    
    for (var key of map.keys()) {
        console.log(key);
    }
    // 1 2
    
    for (var value of map.values()) {
        console.log(value);
    }
    // 'one' 'two'


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM