数据结构Map
Map数据结构相似于对象,是键值对的汇合,传统的键只能用字符串,Map的键不限于字符串,各种类型的值(包含对象)都能够当作键。
如果 Map 的键是一个简略类型的值(数字、字符串、布尔值),则只有两个值严格相等,Map 将其视为一个键,比方0-0就是一个键,布尔值true和字符串true则是两个不同的键。另外,undefinednull也是两个不同的键。尽管NaN不严格相等于本身,但 Map 将其视为同一个键。
创立一个Map--应用new关键字创立

let map = new Map();map.set(-0, 123);map.get(+0) // 123 map.set(true, 1);map.set('true', 2);map.get(true) // 1 map.set(undefined, 3);map.set(null, 4);map.get(undefined) // 3 map.set(NaN, 123);map.get(NaN) // 123

属性:size--返回Map构造的成员总数

const map = new Map();map.set('foo', true);map.set('bar', false);map.size // 2

办法:
set(key,value)--设置key键名的值为value,而后返回整个Map构造,若key曾经有值,则会更新。因为set()返回的是以后Map对象,因而,能够采纳链式写法。

let map = new Map()  .set(1, 'a')  .set(2, 'b')  .set(3, 'c'); 

get(key)--读取key对应的值,若找不key,返回undefined

const m = new Map();const hello = function() {console.log('hello');};m.set(hello, 'Hello ES6!') // 键是函数 m.get(hello)  // Hello ES6!

has(key)--返回一个布尔值,示意某个key是否在以后Map对象中

const m = new Map();m.set('edition', 6);m.set(262, 'standard');m.set(undefined, 'nah');m.has('edition')    // true m.has('years')      // false m.has(262)          // true m.has(undefined)    // true 

delete(key)--删除key键的值,删除胜利返回ture,失败返回false

const m = new Map();m.set(undefined, 'nah');m.has(undefined)    // true m.delete(undefined)m.has(undefined)      // false 

clear(key)--革除所有成员,没有返回值

let map = new Map();map.set('foo', true);map.set('bar', false);map.size // 2 map.clear()map.size // 0

遍历办法:
keys()返回键名的遍历器

let myMap = new Map([    ['name', 'Liane'],    ['age', 18],    ['gender','female'],    ['friends',[        {            'name': 'Ann',            'age': 18,            'gender': 'female'        },        {            'name': 'Lisa',            'age': 16,            'gender': 'female'        },        {            'name': 'jack',            'age': 18,            'gender': 'man'        }    ]]]);let keys = myMap.keys();console.log(keys); /*{'name','age','gender','friends'}*/console.log(keys[0]) /*undefined*/console.log(keys.name)  /*undefined*/console.log(keys.length) /*undefined*console.log(keys.size) /*undefined*console.log([...myMap.keys()]) /*['name','age','gender','friends']*/

values()返回键值的遍历器

console.log([...myMap.value()]) /*['liane',18,'female',Array(3)]*/

entries()返回所有成员的遍历器

console.log([...myMap.entries()])/*[    ['name', 'Liane'],    ['age', 18],    ['gender','female'],    ['friends',Array(3)]]*/

forEach()遍历Map所有成员,forEach能够承受第二参数用来绑定this,当传递第二个值绑定this时,第一个参数不能用箭头函数的写法(箭头函数里的this指向定义所处的对象,不会绑定第二个参数)

let reporter = {    report: (key,value)=>{        console.log('key:%s,value: %s',key,value)    }}myMap.forEach(function(val,key,map){    this.report(key,val)},reporter)

for of遍历

/*遍历整个Map构造*/for(let [key,value] of myMap) {    console.log('key:%s,value: %s',key,value)}/*遍历所有的key*/for(let key of myMap.keys()){    console.log(key) }/*遍历所有的value*/for(let value of myMap.values()){    console.log(value)}