ES6 Map数据类型

mac2025-12-13  9

定义:Map 对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。

语法:

new Map([iterable]);

参数: iterable Iterable 可以是一个数组或者其他 iterable 对象,其元素为键值对(两个元素的数组,例如: [[ 1, ‘one’ ],[ 2, ‘two’ ]])。 每个键值对都会添加到新的 Map。null 会被当做 undefined。

属性: Map.length 属性 length 的值为 0 。

两种Map的格式

//定义Map第一种格式 { let map = new Map(); let arr = ['123']; map.set(arr,456); //set()添加元素 注意和Set区分] //获取某一个元素使用 get() console.log('map',map,map.get(arr)); //{Array(1) => 456} 456 } //定义Map第二种格式 { let map = new Map([['a',123],['b',456]]); //格式 key,value console.log('map args',map); // {"a" => 123, "b" => 456} }

示例 使用Map对象

var myMap = new Map(); var keyObj = {}, keyFunc = function () {}, keyString = "a string"; // 添加键 myMap.set(keyString, "和键'a string'关联的值"); myMap.set(keyObj, "和键keyObj关联的值"); myMap.set(keyFunc, "和键keyFunc关联的值"); myMap.size; // 3 // 读取值 myMap.get(keyString); // "和键'a string'关联的值" myMap.get(keyObj); // "和键keyObj关联的值" myMap.get(keyFunc); // "和键keyFunc关联的值" myMap.get("a string"); // "和键'a string'关联的值" // 因为keyString === 'a string' myMap.get({}); // undefined, 因为keyObj !== {} myMap.get(function() {}) // undefined, 因为keyFunc !== function () {}

Map常用属性和方法

//Map常用属性和方法 { let map = new Map([['a',123],['b',456]]); //格式 key,value //size console.log('size',map.size); // size 2 //delete() console.log('delete',map.delete('a'),map); //{"b" => 456} //clear() console.log('delete',map.clear(),map); //{} }

WeakMap与Map的区别

//1. WeakMap的数据类型只支持对象,WeakMap的对象是弱引用 //2. Map的一些属性和方法WeakMap是没有的 { let weakmap = new WeakMap(); let o = {}; weakmap.set(o,123); console.log(weakmap.get(o)); //123 }

Map遍历

//Map遍历 { //使用 for..of 方法迭代 Map let myMap = new Map(); myMap.set(0,'zero'); myMap.set(1,'one'); console.log(myMap); //{0 => "zero", 1 => "one"} console.log(myMap.get(0)); //zero for(let [key,value] of myMap) { console.log(key + "=" + value); // 0=zero 1=one } // 将会显示两个log。一个是"0 = zero"另一个是"1 = one" for(let key of myMap.keys()) { console.log('key',key); // 将会显示两个log。 一个是 "0" 另一个是 "1" } for(let value of myMap.values()) { console.log('value',value); // 将会显示两个log。 一个是 "zero" 另一个是 "one" } for(let [key,value] of myMap.entries()) { console.log(key + "=" + value); // 将会显示两个log。 一个是 "0 = zero" 另一个是 "1 = one" } //使用 forEach() 方法迭代 Map myMap.forEach((value,key) => { //vaule代表键值 key代表键名 按照参数顺序 console.log(key + "=" + value); // 将会显示两个logs。 一个是 "0 = zero" 另一个是 "1 = one" }) myMap.forEach((item) => { // item代表键值 console.log(item); // 将会显示两个logs。 一个是 "zero" 另一个是 "one" }) }

将NaN作为Map的键 NaN 也可以作为Map对象的键。虽然 NaN 和任何值甚至和自己都不相等(NaN !== NaN 返回true),但下面的例子表明,NaN作为Map的键来说是没有区别的:

var myMap = new Map(); myMap.set(NaN, "not a number"); myMap.get(NaN); // "not a number" var otherNaN = Number("foo"); //NaN myMap.get(otherNaN); // "not a number"

参考链接:Map - JavaScript | MDN

最新回复(0)