本文共 2605 字,大约阅读时间需要 8 分钟。
Map 对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。
key是字符串:
var myMap = new Map();var keyString = "a string"; myMap.set(keyString, "和键'a string'关联的值"); myMap.get(keyString); // "和键'a string'关联的值"myMap.get("a string"); // "和键'a string'关联的值" // 因为 keyString === 'a string'
key是对象:
var myMap = new Map();var keyObj = { }, myMap.set(keyObj, "和键 keyObj 关联的值");myMap.get(keyObj); // "和键 keyObj 关联的值"myMap.get({ }); // undefined, 因为 keyObj !== {}
key是函数:
var myMap = new Map();var keyFunc = function () { }, // 函数 myMap.set(keyFunc, "和键 keyFunc 关联的值"); myMap.get(keyFunc); // "和键 keyFunc 关联的值"myMap.get(function() { }) // undefined, 因为 keyFunc !== function () {}
key是NaN:
var myMap = new Map();myMap.set(NaN, "not a number"); myMap.get(NaN); // "not a number" var otherNaN = Number("foo");myMap.get(otherNaN); // "not a number"
虽然 NaN 和任何值甚至和自己都不相等(NaN !== NaN 返回true),NaN作为Map的键来说是没有区别的。
1. for…of:
var myMap = new Map();myMap.set(0, "zero");myMap.set(1, "one"); // 将会显示两个 log。 一个是 "0 = zero" 另一个是 "1 = one"for (var [key, value] of myMap) { console.log(key + " = " + value);}for (var [key, value] of myMap.entries()) { console.log(key + " = " + value);}/* 这个 entries 方法返回一个新的 Iterator 对象,它按插入顺序包含了 Map 对象中每个元素的 [key, value] 数组。 */ // 将会显示两个log。 一个是 "0" 另一个是 "1"for (var key of myMap.keys()) { console.log(key);}/* 这个 keys 方法返回一个新的 Iterator 对象, 它按插入顺序包含了 Map 对象中每个元素的键。 */ // 将会显示两个log。 一个是 "zero" 另一个是 "one"for (var value of myMap.values()) { console.log(value);}/* 这个 values 方法返回一个新的 Iterator 对象,它按插入顺序包含了 Map 对象中每个元素的值。 */
2. forEach():
var myMap = new Map();myMap.set(0, "zero");myMap.set(1, "one"); // 将会显示两个 logs。 一个是 "0 = zero" 另一个是 "1 = one"myMap.forEach(function(value, key) { console.log(key + " = " + value);}, myMap)
Map与Array的转换:
var kvArray = [["key1", "value1"], ["key2", "value2"]]; // Map 构造函数可以将一个 二维 键值对数组转换成一个 Map 对象var myMap = new Map(kvArray); // 使用 Array.from 函数可以将一个 Map 对象转换成一个二维键值对数组var outArray = Array.from(myMap);
Map的克隆:
var myMap1 = new Map([["key1", "value1"], ["key2", "value2"]]);var myMap2 = new Map(myMap1); console.log(original === clone); // 打印 false。 Map 对象构造函数生成实例,迭代出新的对象。
Map的合并:
var first = new Map([[1, 'one'], [2, 'two'], [3, 'three'],]);var second = new Map([[1, 'uno'], [2, 'dos']]); // 合并两个 Map 对象时,如果有重复的键值,则后面的会覆盖前面的,对应值即 uno,dos, threevar merged = new Map([...first, ...second]);
转载地址:http://jxsqb.baihongyu.com/