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 相关文章推荐
IE下js调试工具Companion.JS
Oct 15 Javascript
JQuery防止退格键网页后退的实现代码
Mar 23 Javascript
从jquery的过滤器.filter()方法想到的
Sep 29 Javascript
巧用js提交表单轻松解决一个页面有多个提交按钮
Nov 17 Javascript
javascript向后台传送相同属性的参数即数组参数
Feb 17 Javascript
jQuery插件实现大图全屏图片相册
Mar 14 Javascript
JS多文件上传的实例代码
Jan 11 Javascript
JS实现点击表头表格自动排序(含数字、字符串、日期)
Jan 22 Javascript
js定时器实现倒计时效果
Nov 05 Javascript
JavaScript实现快速排序的方法分析
Jan 10 Javascript
JavaScript实现数组全排列、去重及求最大值算法示例
Jul 30 Javascript
微信小程序实现文字无限轮播效果
Dec 28 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
基于mysql的bbs设计(四)
2006/10/09 PHP
PHP获取MSN好友列表类的实现代码
2013/06/23 PHP
javascript:以前写的xmlhttp池,代码
2008/05/18 Javascript
基于jquery的loading 加载提示效果实现代码
2011/09/01 Javascript
js 数组去重的四种实用方法
2014/09/09 Javascript
JavaScript阻止浏览器返回按钮的方法
2015/03/18 Javascript
requireJS使用指南
2016/04/27 Javascript
jQuery.Validate表单验证插件的使用示例详解
2017/01/04 Javascript
详解如何使用Node.js编写命令工具——以vue-cli为例
2017/06/29 Javascript
vue2.0开发入门笔记之.vue文件的生成和使用
2017/09/19 Javascript
基于zTree树形菜单的使用实例
2017/12/25 Javascript
微信小程序自定义组件的实现方法及自定义组件与页面间的数据传递问题
2018/10/09 Javascript
微信小程序局部刷新触发整页刷新效果的实现代码
2018/11/21 Javascript
详解JavaScript的变量
2019/04/04 Javascript
微信小程序获取用户信息及手机号(后端TP5.0)
2019/09/12 Javascript
JS co 函数库的含义和用法实例总结
2020/04/08 Javascript
react 生命周期实例分析
2020/05/18 Javascript
antd form表单数据回显操作
2020/11/02 Javascript
操作Windows注册表的简单的Python程序制作教程
2015/04/07 Python
python好玩的项目—色情图片识别代码分享
2017/11/07 Python
Python实现调度算法代码详解
2017/12/01 Python
用vue.js组件模拟v-model指令实例方法
2019/07/05 Python
详解python列表(list)的使用技巧及高级操作
2019/08/15 Python
关于numpy.where()函数 返回值的解释
2019/12/06 Python
40行Python代码实现天气预报和每日鸡汤推送功能
2020/02/27 Python
django执行数据库查询之后实现返回的结果集转json
2020/03/31 Python
Pycharm连接远程服务器过程图解
2020/04/30 Python
Python 使用生成器代替线程的方法
2020/08/04 Python
详解Selenium 元素定位和WebDriver常用方法
2020/12/04 Python
DELPHI面试题研发笔试试卷
2015/11/08 面试题
会议开场欢迎词
2014/01/15 职场文书
服务口号大全
2014/06/11 职场文书
村主任群众路线教育实践活动个人对照检查材料思想汇报
2014/10/01 职场文书
学校运动会广播稿范文
2014/10/02 职场文书
模范教师材料大全
2014/12/16 职场文书
解决Vmware虚拟机安装centos8报错“Section %Packages Does Not End With %End. Pane Is Dead”
2022/06/01 Servers