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 来操作字符串(一些字符串函数)
Feb 15 Javascript
div拖拽插件——JQ.MoveBox.js(自制JQ插件)
May 17 Javascript
window resize和scroll事件的基本优化思路
Apr 29 Javascript
jQuery实现简单的间隔向上滚动效果
Mar 09 Javascript
全面解析Bootstrap表单样式的使用
Sep 09 Javascript
js中利用cookie实现记住密码功能
Aug 20 Javascript
基于JavaScript实现焦点图轮播效果
Mar 27 Javascript
vue.js 实现图片本地预览 裁剪 压缩 上传功能
Mar 01 Javascript
详解微信小程序input标签正则初体验
Aug 18 Javascript
简单了解JavaScript中的执行上下文和堆栈
Jun 24 Javascript
如何基于JS截获动态代码
Dec 25 Javascript
JavaScript 实现拖拽效果组件功能(兼容移动端)
Nov 11 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
Google Voice 短信发送接口PHP开源版(2010.5更新)
2010/07/22 PHP
PHP5.3以上版本安装ZendOptimizer扩展
2015/03/27 PHP
深入解析PHP的Yii框架中的缓存功能
2016/03/29 PHP
PHP-FPM和Nginx的通信机制详解
2019/02/01 PHP
Javascript实例教程(19) 使用HoTMetal(1)
2006/12/23 Javascript
JavaScript闭包详解
2015/02/02 Javascript
鼠标经过子元素触发mouseout,mouseover事件的解决方案
2015/07/26 Javascript
Node.js中使用jQuery的做法
2016/08/17 Javascript
AngularJs Understanding the Model Component
2016/09/02 Javascript
Javascript 事件冒泡机制详细介绍
2016/10/10 Javascript
JS中位置与大小的获取方法
2016/11/22 Javascript
Extjs 中的 Treepanel 实现菜单级联选中效果及实例代码
2017/08/22 Javascript
vue-cli项目优化方法- 缩短首屏加载时间
2018/04/01 Javascript
用Object.prototype.toString.call(obj)检测对象类型原因分析
2018/10/11 Javascript
详解nodejs http请求相关总结
2019/03/31 NodeJs
详解vue微信网页授权最终解决方案
2019/06/16 Javascript
详解Vue-cli3.X使用px2rem遇到的问题
2019/08/09 Javascript
Vue-cli项目部署到Nginx服务器的方法
2019/11/01 Javascript
微信小程序按顺序同步执行的两种方式
2019/12/20 Javascript
解决vue项目中出现Invalid Host header的问题
2020/11/17 Javascript
[05:16]《大圣!大圣》——DOTA2新英雄齐天大圣配音李世宏老师专访
2016/12/13 DOTA
Python实现竖排打印传单手机号码易撕条
2015/03/16 Python
Python中的time模块与datetime模块用法总结
2016/06/30 Python
使用Python对SQLite数据库操作
2017/04/06 Python
学生信息管理系统python版
2018/10/17 Python
浅谈JupyterNotebook导出pdf解决中文的问题
2020/04/22 Python
Python中无限循环需要什么条件
2020/05/27 Python
CSS3 圆角效果
2009/07/15 HTML / CSS
Bulk Powders意大利:运动补充在线商店
2019/02/09 全球购物
日期和时间问题
2015/01/04 面试题
项目合作协议书范本
2014/04/16 职场文书
政府绩效管理实施方案
2014/05/04 职场文书
预防煤气中毒方案
2014/06/16 职场文书
运动会加油稿100字
2014/09/19 职场文书
七年级作文之下雨天
2019/12/23 职场文书
python中subplot大小的设置步骤
2021/06/28 Python