// Map的key键名可以是各种类型的值
let m = new Map([
["name", "王致和"],
["gender", 1]
])
console.log(m);//Map(2) {'name' => '王致和', 'gender' => 1}
// set()方法作用:给实例设置一对键值对,返回map实例。
let ms = new Map()
ms.set("name", "老干妈")
ms.set(1, 2)
console.log(ms);//Map(2) {'name' => '老干妈', 1 => 2}
ms.set(null, 3)
ms.set(undefined, 4)
ms.set({}, 5)
console.log(ms);//Map(5) {'name' => '老干妈', 1 => 2, null => 3, undefined => 4, {…} => 5}
// 如果后面set的数据中有相同的属性,就会覆盖掉前面的
ms.set("name", "王致和")
console.log(ms);//Map(5) {'name' => '王致和', 1 => 2, null => 3, undefined => 4, {…} => 5}
// get()方法作用:获取指定键名的键值,返回键值。
console.log(ms.get("name"));//王致和
console.log(ms.get(1));//2
console.log(ms.get(null));//3
// delete ( )方法作用:删除指定的键值对,删除成功返回:true,否则返回:false。
ms.delete("name")
console.log(ms);//Map(4) {1 => 2, null => 3, undefined => 4, {…} => 5}
ms.delete(null)
ms.delete(1)
console.log(ms);//Map(2) {undefined => 4, {…} => 5}
// 跟Set结构一样,Map结构也提供了clear()方法,让你一次性删除所有键值对。
ms.clear()
console.log(ms);//Map(0) {size: 0}
// has()方法作用:判断Map实例内是否含有指定的键值对,有就返回:true,否则返回:false。
console.log(m.has('name'));//true
console.log(m.has(1));//false
// entries()方法作用:返回实例的键值对遍历器。
for (let [key, value] of m.entries()) {
console.log(key + '' + value);//name王致和 gender1
}
// keys()方法:返回实例所有键名的遍历器。
for (let key of m.keys()) {
console.log(key);//name gender
}
// values() 方法:返回实例所有键值的遍历器。
for (let value of m.values()) {
console.log(value);//王致和 1
}
// forEach遍历每一个键值对:
m.forEach(function (value, key) {
console.log(key + ':' + value);//name:王致和 gender:1
})
// size:获取实例的成员数。
console.log(m.size);//2
// WeakMap结构和Map结构很类似,不同点在于WeakMap结构的键名只支持引用类型的数据。哪些是引用类型的值呢?比如:数组,对象,函数。
let mx = new WeakMap()
mx.set([1], 2)
mx.set({ 'name': 'zhangsan' }, 2)
function fn(){ }
mx.set(fn, 2)
console.log(mx);//WeakMap {ƒ => 2, Array(1) => 2, {…} => 2}
// WeakMap如果是普通的值类型则不允许。比如:字符串,数字,null,undefined,布尔类型。而Map结构是允许的