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学习笔记(三) String 字符串类型介绍
Jun 19 Javascript
javascript运行机制之this详细介绍
Feb 07 Javascript
JavaScript获取当前日期是星期几的方法
Apr 06 Javascript
jQuery幻灯片带缩略图轮播效果代码分享
Aug 17 Javascript
JS实现网页标题栏显示当前时间和日期的完整代码
Nov 02 Javascript
详解JavaScript 中的 replace 方法
Jan 01 Javascript
Mac下使用charles遇到的问题以及解决办法
Jan 10 Javascript
BootStrap表单控件之复选框checkbox和单选择按钮radio
May 23 Javascript
通过示例彻底搞懂js闭包
Aug 10 Javascript
AngularJS实现与后台服务器进行交互的示例讲解
Aug 13 Javascript
javascript自定义右键菜单插件
Dec 16 Javascript
Element Tooltip 文字提示的使用示例
Jul 26 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 cookis创建实现代码
2009/03/16 PHP
PHP中替换键名的简易方法示例详解
2014/01/07 PHP
CI框架中site_url()和base_url()的区别
2015/01/07 PHP
php将日期格式转换成xx天前的格式
2015/04/16 PHP
php parse_str() 函数的定义和用法
2016/05/23 PHP
浅谈javascript的数据类型检测
2010/07/10 Javascript
九种js弹出对话框的方法总结
2013/03/12 Javascript
jQuery学习笔记之总体架构
2014/06/03 Javascript
js中一维数组和二位数组中的几个问题示例说明
2014/07/17 Javascript
Angular.js中用ng-repeat-start实现自定义显示
2016/10/18 Javascript
Bootstrap CSS组件之分页(pagination)和翻页(pager)
2016/12/17 Javascript
JavaScript日期对象(Date)基本用法示例
2017/01/18 Javascript
js实现截图保存图片功能的代码示例
2017/02/16 Javascript
Bootstrap实现的表格合并单元格示例
2018/02/06 Javascript
JS实现HTML页面中动态显示当前时间完整示例
2018/07/30 Javascript
浅析vue中的MVVM实现原理
2019/03/04 Javascript
使用element-ui的el-menu导航选中后刷新页面保持当前选中状态
2019/07/19 Javascript
详解Vue 换肤方案验证
2019/08/28 Javascript
Python中利用xpath解析HTML的方法
2018/05/14 Python
Python中的十大图像处理工具(小结)
2019/06/10 Python
在Qt5和PyQt5中设置支持高分辨率屏幕自适应的方法
2019/06/18 Python
python构建指数平滑预测模型示例
2019/11/21 Python
Python实现PS滤镜中的USM锐化效果
2020/12/04 Python
HTML5 CSS3给网站设计带来出色效果
2009/07/16 HTML / CSS
纯HTML5+CSS3制作图片旋转
2016/01/12 HTML / CSS
声明struct x1 { . . . }; 和typedef struct { . . . }x2;有什么不同
2012/06/02 面试题
HR喜欢的自荐信格式
2013/10/08 职场文书
材料物理专业个人求职信
2013/12/15 职场文书
总经理助理工作职责
2014/02/06 职场文书
省文明单位申报材料
2014/05/08 职场文书
无犯罪记录证明样本
2015/06/16 职场文书
2015年庆祝国庆节66周年演讲稿
2015/07/30 职场文书
职场干货:简历中的自我评价应该这样写!
2019/05/06 职场文书
vue实现可以快进后退的跑马灯组件
2022/04/08 Vue.js
Python进程间的通信之语法学习
2022/04/11 Python
阿里面试Nacos配置中心交互模型是push还是pull原理解析
2022/07/23 Java/Android