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 相关文章推荐
[原创]来自ImageSee官方 JavaScript图片浏览器
Jan 16 Javascript
50款非常棒的 jQuery 插件分享
Mar 29 Javascript
Javascript 浮点运算的问题分析与解决方法
Aug 27 Javascript
jquery.ui.draggable中文文档(原文翻译)
Nov 15 Javascript
解决Extjs4中form表单提交后无法进入success函数问题
Nov 26 Javascript
javascript对JSON数据排序的3个例子
Apr 12 Javascript
基于JS实现导航条之调用网页助手小精灵的方法
Jun 17 Javascript
jQuery实现的背景颜色渐变动画效果示例
Mar 24 jQuery
angular bootstrap timepicker TypeError提示怎么办
Jun 13 Javascript
Bootstrap标签页(Tab)插件切换echarts不显示问题的解决
Jul 13 Javascript
读懂CommonJS的模块加载
Apr 19 Javascript
Vue.js如何使用Socket.IO的示例代码
Sep 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
PHP表单递交控件名称含有点号(.)会被转化为下划线(_)的处理方法
2013/01/06 PHP
深入PHP操作MongoDB的技术总结
2013/06/02 PHP
完美的2个php检测字符串是否是utf-8编码函数分享
2014/07/28 PHP
PHP连接MSSQL2008/2005数据库(SQLSRV)配置实例
2014/10/22 PHP
PHP正则删除HTML代码中宽高样式的方法
2017/06/12 PHP
PHP Swoole异步MySQL客户端实现方法示例
2019/10/24 PHP
PHP中关于php.ini参数优化详解
2020/02/28 PHP
基于Jquery的开发个代阴影的对话框效果代码
2011/07/28 Javascript
jQuery怎么解析Json字符串(Json格式/Json对象)
2013/08/09 Javascript
js中substr,substring,indexOf,lastIndexOf的用法小结
2013/12/27 Javascript
一个简单的动态加载js和css的jquery代码
2014/09/01 Javascript
JavaScript简单实现鼠标移动切换图片的方法
2016/02/23 Javascript
Dojo获取下拉框的文本和值实例代码
2016/05/27 Javascript
nodeJs内存泄漏问题详解
2016/09/05 NodeJs
AngularJS实现按钮提示与点击变色效果
2016/09/07 Javascript
基于vue2.0实现仿百度前端分页效果附实现代码
2018/10/30 Javascript
微信小程序扫描二维码获取信息实例详解
2019/05/07 Javascript
vue 输入电话号码自动按3-4-4分割功能的实现代码
2020/04/30 Javascript
Vue element-ui父组件控制子组件的表单校验操作
2020/07/17 Javascript
vue 使用原生组件上传图片的实例
2020/09/08 Javascript
[01:24]DOTA2上海特锦赛OG战队抵达 专车接机入驻总统套房
2016/02/23 DOTA
[42:20]Secret vs Liquid 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
[01:23:24]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第三场 2月7日
2021/03/11 DOTA
Python利用turtle库绘制彩虹代码示例
2017/12/20 Python
Python实现拷贝/删除文件夹的方法详解
2018/08/29 Python
python实现定时压缩指定文件夹发送邮件
2020/12/22 Python
windows上安装python3教程以及环境变量配置详解
2019/07/18 Python
详解如何从TensorFlow的mnist数据集导出手写体数字图片
2019/08/05 Python
python 画出使用分类器得到的决策边界
2019/08/21 Python
使用PyOpenGL绘制三维坐标系实例
2019/12/24 Python
TUMI香港官网:国际领先的行李箱、背囊品牌
2021/03/01 全球购物
庆七一活动方案
2014/01/25 职场文书
2014乡镇机关党员个人对照检查材料思想汇报
2014/10/09 职场文书
研究生导师推荐信
2015/03/25 职场文书
搞笑婚庆主持词
2015/06/29 职场文书
Java spring定时任务详解
2021/10/05 Java/Android