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 相关文章推荐
关于jquery动态增减控件的一些想法和小插件
Aug 01 Javascript
js判断鼠标同时离开两个div的思路及代码
May 31 Javascript
深入剖析JavaScript中的枚举功能
Mar 06 Javascript
zeroclipboard 单个复制按钮和多个复制按钮的实现方法
Jun 14 Javascript
用window.onerror捕获并上报Js错误的方法
Jan 27 Javascript
JS跨域请求外部服务器的资源
Feb 06 Javascript
初探JavaScript 面向对象(推荐)
Sep 03 Javascript
基于Cookie常用操作以及属性介绍
Sep 07 Javascript
vue路由跳转时判断用户是否登录功能的实现
Oct 26 Javascript
mock.js实现模拟生成假数据功能示例
Jan 15 Javascript
Javascript 对象(object)合并操作实例分析
Jul 30 Javascript
javascript实现前端成语点击验证优化
Jun 24 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
德生S2000南麂列岛台湾FM收听记录
2021/03/02 无线电
生成ubuntu自动切换壁纸xml文件的php代码
2010/07/17 PHP
php从文件夹随机读取文件的方法
2015/06/01 PHP
Symfony2安装第三方Bundles实例详解
2016/02/04 PHP
PHP微信分享开发详解
2017/01/14 PHP
document.forms用法示例介绍
2014/06/26 Javascript
JavaScript判断undefined类型的正确方法
2015/06/30 Javascript
JavaScript中的this到底是什么(一)
2015/12/09 Javascript
Vue.JS入门教程之列表渲染
2016/12/01 Javascript
vue的基本用法与常见指令
2017/08/15 Javascript
jQuery访问浏览器本地存储cookie、localStorage和sessionStorage的基本用法
2017/10/20 jQuery
Redux实现组合计数器的示例代码
2018/07/04 Javascript
微信小程序可滑动月日历组件使用详解
2019/10/21 Javascript
vue3.0 上手体验
2020/09/21 Javascript
Javascript实现单选框效果
2020/12/09 Javascript
python根据距离和时长计算配速示例
2014/02/16 Python
python 转换 Javascript %u 字符串为python unicode的代码
2016/09/06 Python
Python爬虫之网页图片抓取的方法
2018/07/16 Python
pycharm 取消默认的右击运行unittest的方法
2018/11/29 Python
python对列进行平移变换的方法(shift)
2019/01/10 Python
python global和nonlocal用法解析
2020/02/03 Python
Pytorch 使用CNN图像分类的实现
2020/06/16 Python
Python编写单元测试代码实例
2020/09/10 Python
使用canvas绘制超炫时钟
2014/12/17 HTML / CSS
DAWGS鞋官方网站:鞋,凉鞋,靴子
2016/10/04 全球购物
乐天旅游台湾网站:Rakuten Travel TW
2017/06/01 全球购物
英国最大的户外商店:Go Outdoors
2019/04/17 全球购物
医学专业个人求职自荐信格式
2013/09/23 职场文书
大学毕业生通用求职信
2013/09/28 职场文书
大学生社会实践活动总结
2014/07/03 职场文书
2014年教师节活动总结
2014/08/29 职场文书
党员先进性教育整改措施
2014/09/18 职场文书
教育合作协议范本
2014/10/17 职场文书
王兆力在市委党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书
学校拾金不昧表扬信
2015/01/16 职场文书
如何获取numpy array前N个最大值
2021/05/14 Python