Map
对象
Map
对象保存键值对,并且能够记住键的原始插入顺序。任何值(对象或者基本类型)都可以作为一个键或者一个值。
Map
对象是键值对的集合。Map
中的一个键只能出现一次;它在Map
的集合中是独一无二的。Map
对象按键值对迭代——一个for...of
循环在每次迭代后会返回一个形式为[key, value]
的数组。迭代按照插入顺序进行,即键值对按set()
方法首次插入到集合中的顺序(也就是说,当调用set
时,map中没有具有相同值的键)进行迭代。
我们通常见到的键值对只是a:1
的这种形式,实际上[a, 1] { a => 1 }
这种形式都是键值对的形式。
键的相等性
Map
键的比较基于零值相等算法。(它曾经使用同值相等,将0
和-0
视为不同。检查浏览器兼容性。)这意味着NaN
是与NaN
相等的,虽然NaN !== NaN
,剩下所有的其它的值是根据===
运算符的结果判断是否相等。
**Map**
构造函数中的参数
Map
构造函数中的参数接收二维数组,数组内部是以键值对的形式存在的,例如:
const map = new Map([
[{}, '1'],
['too', 'bar'],
[true, 'false'],
]);
**Map**
实例属性、实例方法
Map
实例属性size
:返回Map
对象中的键值对数量,注意是[[Entries]]
属性内部的键值对数量,并不是Map
对象自身上的属性数量。
Map
实例方法:
clear
:移除Map
对象中所有的键值对。delete
:移除Map
对象中指定的键值对,如果键值对存在并成功被移除,返回true
,否则返回false
。调用delete
后再调用map.has(key)
将返回false
。has
:返回一个布尔值,用来表明Map
对象中是否存在与指定的键key
关联的值。get
:返回与指定的键key
关联的值,若不存在关联的值,则返回undefined
。set
:在Map
对象中设置与指定的键key
关联的值,并返回Map
对象。keys
:返回一个新的迭代对象,其中包含map
对象中所有的键,并以插入Map
对象的顺序排列。values
:返回一个新的迭代对象,其中包含map
对象中所有的值,并以插入Map
对象的顺序排列。entries
:返回一个新的迭代对象,其为一个包含map
对象中所有键值对的[key, value]
数组,并以插入Map
对象的顺序排列。forEach
:以插入的顺序对Map
对象中存在的键值对分别调用一次callbackFn
。如果给定了thisArg
参数,这个参数将会是回调函数中的this
值。
const map = new Map();
map.set({a:1}, 'a:1');
map.set({a:2}, 'a:2');
map.forEach((key, value)=>{
console.log(key, value); // a:1 {a:1}
});