🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# Map 数据结构 > 对象本质上是键值对的集合。但是只能使用字符串充当键; > map 结构与对象类似,也是键值对集合,但是”键”的范围不限于字符串,对象也可以当作键。 ```javascript let m = new Map() let o = { p: 'hello ES6!' } m.set(o, 'context') //这里 o 作为 m的一个键 console.log(m.get(o)) //context //Map函数可接收一个数组进行初始化。 let map = new Map([['name', 'clouds'], ['age', 18]]) console.log(map.size) // 2 console.log(map.has('name')) // true console.log(map.get('name')) // clouds console.log(map.has('age')) // true ``` **注意:只有针对同一个对象的引用,Map 结构才将其视作同一个键。这一点要非常小心才行。** ```javascript var map = new Map() map.set(['a'], 555) map.get(['a']) // undefined /* 在这里set和get方法表面上是针对同一个键,但实际上这是两个值,内存地址是不一样的,因此get方法无法读取该键,返回undefined。*/ ``` >Map结构有以下属性和方法: - size : 返回成员总数。 - set(key, value) : 设置一个键值对。 - get(key) : 读取一个键。 - has(key) : 返回一个布尔值,表示某个键是否在Map结构中。 - delete(key) : 删除某个键。 - clear() : 清除所有成员。 ```javascript let m = new Map() m.set('clouds','yes') m.set(998,'带回家') m.set(undefined,'node') let hello = _ => 'hello es6!' m.set(hello,'i,m hello') m.has('clouds') m.has('memeda') m.has(undefined) m.has(998) m.delete(undefined) m.has(undefined) console.log(m.size) //3 console.log(m.undefined) //undefined console.log(m.get(hello)) // i,m hello m.clear() console.log(m.size) // 0 ``` > 遍历,返回值均为数组 - key() : 返回键名的遍历器。 - values() : 返回键值的遍历器。 - entries() : 返回所有成员的遍历器。 除此之外还有一个与数组相同的forEach方法。