ECMAScript6中Map/WeakMap详解


Posted in Javascript onJune 12, 2015

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。以下为图示

ECMAScript6中Map/WeakMap详解

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. 方法和属性

ECMAScript6中Map/WeakMap详解

二、WeakMap

与Map的区别

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

ECMAScript6中Map/WeakMap详解

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

Javascript 相关文章推荐
Javascript 变量作用域 两个可能会被忽略的小特性
Mar 23 Javascript
Jquery+ajax请求data显示在GridView上(asp.net)
Aug 27 Javascript
js中的setInterval和setTimeout使用实例
May 09 Javascript
使用javascript获取页面名称
Dec 23 Javascript
基于jquery实现可定制的web在线富文本编辑器附源码下载
Nov 17 Javascript
jQuery 实现ajax传入参数含有特殊字符的方法总结
Oct 17 Javascript
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
Dec 14 Javascript
Vue2.x中的父子组件相互通信的实现方法
May 02 Javascript
JavaScript设计模式之责任链模式实例分析
Jan 16 Javascript
JavaScript实现图片伪异步上传过程解析
Apr 10 Javascript
js实现盒子移动动画效果
Aug 09 Javascript
Ajax异步刷新功能及简单案例
Nov 20 Javascript
JavaScript中Date.toSource()方法的使用教程
Jun 12 #Javascript
ECMAScript6中Set/WeakSet详解
Jun 12 #Javascript
JavaScript中的toLocaleDateString()方法使用简介
Jun 12 #Javascript
ECMAScript6块级作用域及新变量声明(let)
Jun 12 #Javascript
JavaScript中的toDateString()方法使用详解
Jun 12 #Javascript
ECMAScript6新增值比较函数Object.is
Jun 12 #Javascript
ECMAScript6函数剩余参数(Rest Parameters)
Jun 12 #Javascript
You might like
[原创]效率较高的php下读取文本文件的代码
2008/07/02 PHP
PHP 多维数组的排序问题 根据二维数组中某个项排序
2011/11/09 PHP
PHP封装的字符串加密解密函数
2015/12/18 PHP
详解PHP实现异步调用的4种方法
2016/03/14 PHP
php异步:在php中使用fsockopen curl实现类似异步处理的功能方法
2016/12/10 PHP
详解在YII2框架中使用UEditor编辑器发布文章
2018/11/02 PHP
jQuery源码分析-01总体架构分析
2011/11/14 Javascript
javascript间隔定时器(延时定时器)学习 间隔调用和延时调用
2014/01/13 Javascript
利用JQuery制作符合Web标准的QQ弹出消息
2014/01/14 Javascript
JS检测输入字符是否包含非法字符的示例代码
2014/02/11 Javascript
原生javascript实现隔行换色
2015/01/04 Javascript
JS实现样式清新的横排下拉菜单效果
2015/10/09 Javascript
jQuery+PHP实现可编辑表格字段内容并实时保存
2015/10/09 Javascript
JavaScript面试开发常用的知识点总结
2016/08/08 Javascript
页面点击小红心js实现代码
2018/05/26 Javascript
NodeJS如何实现同步的方法示例
2018/08/24 NodeJs
vue-cli3 从搭建到优化的详细步骤
2019/01/20 Javascript
python 实现堆排序算法代码
2012/06/05 Python
使用python实现正则匹配检索远端FTP目录下的文件
2015/03/25 Python
Python实现删除文件中含“指定内容”的行示例
2017/06/09 Python
python 并发编程 多路复用IO模型详解
2019/08/20 Python
Python之Numpy的超实用基础详细教程
2019/10/23 Python
Python2 与Python3的版本区别实例分析
2020/03/30 Python
解决Jupyter无法导入已安装的 module问题
2020/04/17 Python
意大利独特而优质的家居用品:Fazzini
2018/12/05 全球购物
母亲80寿诞答谢词
2014/01/16 职场文书
个人优缺点自我评价
2014/01/27 职场文书
幼儿教师培训感言
2014/03/08 职场文书
美国留学经济担保书
2014/05/20 职场文书
中学生运动会口号
2014/06/07 职场文书
法制教育演讲稿
2014/09/10 职场文书
群众路线教育实践活动批评与自我批评
2014/09/15 职场文书
表彰大会新闻稿
2015/07/17 职场文书
基于Python实现的购物商城管理系统
2021/04/27 Python
一篇文章带你搞懂Python类的相关知识
2021/05/20 Python
Java实现二分搜索树的示例代码
2022/03/17 Java/Android