ECMAScript6中Map/WeakMap详解

 更新时间:2015年06月12日 10:44:35   投稿:hebedich  
这篇文章主要介绍了ECMAScript6中Map/WeakMap详解的相关资料,需要的朋友可以参考下

JS的对象本身就是个键值结构,ES6为什么还需要加Map呢,它与普通的JS对象有何区别?

一、Map

1. Map构造器

先看Map的简单用法

// 字符串作为key, 和JS对象类似
var map = new Map()
// set
map.set('name', 'John')
map.set('age', 29)
// get
map.get('name') // John
map.get('age') // 29

这么对代码,看起来确实没有JS对象简洁

但Map的强大之处在于它的key可以是任意类型

// 对象作为key演示
var xy = {x: 10, y: 20}  // 坐标
var wh = {w: 100, h: 200} // 宽高
var map = new Map()
// set
map.set(xy, '坐标')
map.set(wh, '宽高')
// get
map.get(xy) // '坐标'
map.get(wh) // '宽高'

以上演示了用对象作为key的Map。以下为图示

Map构造器还支持传数组方式

var map = new Map([["name", "John"], ["age", "29"]])
 
// 遍历key
for (var key of map.keys()) {
  console.log(key) // name, age
}

2. 迭代

和Set一样用for of来迭代Map,键调用map.keys(),值调用map.values(),键值实体调用map.entries()

var map = new Map()
// set
map.set('name', 'John')
map.set('age', 29)
// get
map.get('name') // 'John'
map.get('age') // 29
 
// 遍历key
for (var key of map.keys()) {
  console.log(key)
}
 
// 遍历value
for (var val of map.values()) {
  console.log(val)
}
 
// 遍历实体
for (var arr of map.entries()) {
  console.log('key: ' + arr[0] + ', value: ' + arr[1])
}
 
// 遍历实体的简写
for (var [key, val] of map.entries()) {
  console.log('key: ' + key + ', value: ' + val)
}
 

3. 方法和属性

二、WeakMap

与Map的区别

不接受基本类型的值作为键名
没有keys、values、entries和size
有以下方法

以上所述就是本文的全部内容了,希望大家能够喜欢。

相关文章

  • 原生JS实现可拖拽登录框

    原生JS实现可拖拽登录框

    这篇文章主要为大家详细介绍了原生JS实现可拖拽登录框,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • JavaScript中的call和apply的用途以及区别

    JavaScript中的call和apply的用途以及区别

    本文主要介绍了JavaScript中的call和apply的用途以及区别。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • 使用JavaScript动态设置样式实现代码及演示动画

    使用JavaScript动态设置样式实现代码及演示动画

    使用onmouseover和onmouseout事件实现不同的效果而且是使用js动态实现,本文有利于巩固你js与css方面的知识,感兴趣的你可以了解下哦,希望本文对你有所帮助
    2013-01-01
  • javascript Array对象基础知识小结

    javascript Array对象基础知识小结

    感觉自己对Array对象总是有种朦胧的感觉,今天自己手写总结,加深一下印象。
    2010-11-11
  • JavaScript常见数组方法之如何转置矩阵

    JavaScript常见数组方法之如何转置矩阵

    这篇文章主要给大家介绍了关于JavaScript常见数组方法之如何转置矩阵的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-03-03
  • 基于JavaScript 性能优化技巧心得(分享)

    基于JavaScript 性能优化技巧心得(分享)

    下面小编就为大家分享一篇基于JavaScript 性能优化技巧心得,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • 扩展js对象数组的OrderByAsc和OrderByDesc方法实现思路

    扩展js对象数组的OrderByAsc和OrderByDesc方法实现思路

    js的扩展方法是基于原型的,如Array.prototype.XXXX就是给Array扩展XXX方法,然后数组都能使用这个方法了,在对象数组里面经常有根据属性来进行排序的,升序,降序的,下面与大家分享自己写的一个
    2013-05-05
  • LayUI下拉树TreeSelect的使用解读

    LayUI下拉树TreeSelect的使用解读

    这篇文章主要介绍了LayUI下拉树TreeSelect的使用解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • Bootstrap实现基于carousel.js框架的轮播图效果

    Bootstrap实现基于carousel.js框架的轮播图效果

    这篇文章主要为大家详细介绍了Bootstrap实现基于carousel.js框架的轮播图效果,无过渡动画,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • 如何实现一个webpack模块解析器

    如何实现一个webpack模块解析器

    这篇文章主要介绍了如何实现一个webpack模块解析器,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10

最新评论