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 相关文章推荐
自适应高度框架 ----属个人收藏内容
Jan 22 Javascript
js prototype 格式化数字 By shawl.qiu
Apr 02 Javascript
JS OOP包机制,类创建的方法定义
Nov 02 Javascript
jQuery新闻滚动插件 jquery.roller.js
Jun 27 Javascript
JavaScript数字和字符串转换示例
Mar 26 Javascript
jQuery中after()方法用法实例
Dec 25 Javascript
深入理解JavaScript系列(42):设计模式之原型模式详解
Mar 04 Javascript
很全面的JavaScript常用功能汇总集合
Jan 22 Javascript
angular 内存溢出的问题解决
Jul 12 Javascript
JS+CSS3实现的简易钟表效果示例
Apr 13 Javascript
vue开发移动端底部导航条功能
Apr 08 Javascript
webpack 如何同时输出压缩和未压缩的文件的实现步骤
Jun 05 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
文件上传程序的全部源码
2006/10/09 PHP
codeigniter框架The URI you submitted has disallowed characters错误解决方法
2014/05/06 PHP
PHP函数实现从一个文本字符串中提取关键字的方法
2015/07/01 PHP
深入浅出讲解:php的socket通信原理
2016/12/03 PHP
thinkphp框架表单数组实现图片批量上传功能示例
2020/04/04 PHP
如何用javascript控制上传文件的大小
2006/10/26 Javascript
比较详细的关于javascript中void(0)的具体含义解释
2007/08/02 Javascript
JavaScript游戏之优化篇
2010/11/08 Javascript
jQuery对象和Javascript对象之间转换的实例代码
2013/03/20 Javascript
简单的Jquery遮罩层代码实例
2013/11/14 Javascript
tangram框架响应式加载图片方法
2013/11/21 Javascript
js中split函数的使用方法说明
2013/12/26 Javascript
jquery中的常用事件bind、hover、toggle等示例介绍
2014/07/21 Javascript
生成二维码方法汇总
2014/12/26 Javascript
js实现同一个页面多个渐变效果的方法
2015/04/10 Javascript
jQuery学习笔记之入门
2016/12/14 Javascript
Windows下使用Nodejs运行js的方法
2017/09/02 NodeJs
Vue实现移动端页面切换效果【推荐】
2018/11/13 Javascript
vue实现动态显示与隐藏底部导航的方法分析
2019/02/11 Javascript
layui实现左侧菜单点击右侧内容区显示
2019/07/26 Javascript
ES6基础之 Promise 对象用法实例详解
2019/08/22 Javascript
微信小程序手动添加收货地址省市区联动
2020/05/18 Javascript
jQuery实现简单全选框
2020/09/13 jQuery
python中使用%与.format格式化文本方法解析
2017/12/27 Python
python实现趣味图片字符化
2019/04/30 Python
深入了解Django View(视图系统)
2019/07/23 Python
图库照片、免版税图片、矢量艺术、视频片段:Depositphotos
2019/08/02 全球购物
我们的节日清明节活动方案
2014/03/05 职场文书
中秋寄语大全
2014/04/11 职场文书
信电学院毕业生自荐书
2014/05/24 职场文书
医学生求职自荐书
2014/06/12 职场文书
村委会贫困证明范文
2014/09/21 职场文书
大学生学期个人总结
2015/02/12 职场文书
2015年创先争优工作总结
2015/05/23 职场文书
同事离别感言
2015/08/04 职场文书
MySQL系列之八 MySQL服务器变量
2021/07/02 MySQL