介绍:
对象保存键值对,并记住键的原始插入顺序。任何值(对象值和原始值)都可以用作键或值。
// const map = new Map(); const map = new Map([[1, 2], [{ a: 1 }, 2], ["1", 2]]); console.log(map) // Map(3) {1 => 2, {…} => 2, "1" => 2}
实例属性和方法:
size 项数
set 添加一个新建元素到映射
clear 从映射中移除所有元素
delete 从映射中移除指定的元素
has 如果映射包含指定元素,则返回 true
get 返回映射中的指定元素
toString 返回映射的字符串表达式
valueOf 返回指定对象的原始值
const myMap = new Map();
// 任何值(对象值和原始值)都可以用作键或值 const keyObj = {}; myMap.set(keyObj, 'value associated with keyObj'); console.log(myMap.get(keyObj)) // value associated with keyObj // 添加 和 获取 时所用的 key 指向不同地址,所以无法获取 myMap.set({}, 'value associated with {}'); console.log(myMap.get({})); // undefined // 虽然 NaN !== NaN,但在 new Map()中 NaN 被视为与 NaN 相同 myMap.set(NaN, 'value associated with NaN'); console.log(myMap.get(NaN)); // value associated with NaN console.log(NaN === NaN); // false
遍历方法:
forEach()
语法:Map.prototype.forEach(callbackFn, this)
每循环一项,执行一次回调 callbackFn,第二个参数改变回调函数的 this 指向,
注意:callbackFn 如果是箭头函数,this 指向父级
const map = new Map([[1, 1], [{ a: 1 }, 2], ["1", 3]]); const fn = function(value, key, map) { console.log(`${value} = ${key}`, this) } map.forEach(fn, window); // value = key Window // 2 = 1 Window
keys()
values()
entries()
for..of
let myMap = new Map() myMap.set(0, 'zero') myMap.set(1, 'one') for (let [key, value] of myMap) { console.log(key + ' = ' + value) } // 0 = zero // 1 = one for (let key of myMap.keys()) { console.log(key) } // 0 // 1 for (let value of myMap.values()) { console.log(value) } // zero // one for (let [key, value] of myMap.entries()) { console.log(key + ' = ' + value) } // 0 = zero // 1 = one