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 Event学习第五章 高级事件注册模型
Feb 07 Javascript
基于jquery的获取浏览器窗口大小的代码
Mar 28 Javascript
JS中的prototype与面向对象的实例讲解
May 22 Javascript
extjs中form与grid交互数据(record)的方法
Aug 29 Javascript
js闭包的用途详解
Nov 09 Javascript
jQuery晃动层特效实现方法
Mar 09 Javascript
JS+CSS实现的日本门户网站经典选项卡导航效果
Sep 27 Javascript
jQuery Validation Plugin验证插件手动验证
Jan 26 Javascript
AngularJS入门教程之更多模板详解
Aug 19 Javascript
JavaScript实现公历转农历功能示例
Feb 13 Javascript
JS中判断某个字符串是否包含另一个字符串的五种方法
May 03 Javascript
关于vue-cli3打包代码后白屏的解决方案
Sep 02 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/06/19 PHP
深入解析php中的foreach函数
2013/08/31 PHP
Laravel框架使用monolog_mysql实现将系统日志信息保存到mysql数据库的方法
2018/08/16 PHP
Firefox下提示illegal character并出现乱码的原因
2010/03/25 Javascript
禁止js文件缓存的代码
2010/04/09 Javascript
基于jQuery的history历史记录插件
2010/12/11 Javascript
JavaScript eval() 函数介绍及应用示例
2014/07/29 Javascript
JavaScript lastIndexOf方法入门实例(计算指定字符在字符串中最后一次出现的位置)
2014/10/17 Javascript
Javascript核心读书有感之语言核心
2015/02/01 Javascript
jQuery滚动条插件nanoscroller使用指南
2015/04/21 Javascript
javascript如何实现360度全景照片问题汇总
2016/04/04 Javascript
JS获取填报扩展单元格控件的值的解决办法
2017/07/14 Javascript
js实现鼠标跟随运动效果
2020/08/02 Javascript
vue写一个组件
2018/04/09 Javascript
Vue.js 图标选择组件实践详解
2018/12/03 Javascript
Vue函数式组件-你值得拥有
2019/05/09 Javascript
JS+DIV实现拖动效果
2020/02/11 Javascript
Node.js API详解之 util模块用法实例分析
2020/05/09 Javascript
微信小程序清空输入框信息与实现屏幕往上滚动的示例代码
2020/06/23 Javascript
python 实时遍历日志文件
2016/04/12 Python
[原创]pip和pygal的安装实例教程
2017/12/07 Python
padas 生成excel 增加sheet表的实例
2018/12/11 Python
Python OpenCV之图片缩放的实现(cv2.resize)
2019/06/28 Python
Python数据存储之 h5py详解
2019/12/26 Python
Python如何爬取b站热门视频并导入Excel
2020/08/10 Python
Pytorch之扩充tensor的操作
2021/03/04 Python
详解CSS3 用border写 空心三角箭头 (两种写法)
2017/09/29 HTML / CSS
记一次高分屏下canvas模糊问题
2020/02/17 HTML / CSS
里程积分管理买卖交换平台:Points.com
2017/01/13 全球购物
会计专业自我鉴定范文
2013/12/29 职场文书
我的中国梦演讲稿300字
2014/08/19 职场文书
三提三创主题教育活动查摆整改措施
2014/10/25 职场文书
毕业论文致谢部分怎么写
2015/05/14 职场文书
单位病假条范文
2015/08/17 职场文书
pytorch通过训练结果的复现设置随机种子
2021/06/01 Python
「玫瑰之王的葬礼」舞台剧主视觉图公开
2022/03/21 日漫