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实用技巧必备(上)
Nov 02 Javascript
JavaScript图像延迟加载库Echo.js
Apr 05 Javascript
浅谈JQ中mouseover和mouseenter的区别
Sep 13 Javascript
Node.js下自定义错误类型详解
Oct 17 Javascript
js输入框使用正则表达式校验输入内容的实例
Feb 12 Javascript
jQuery使用DataTable实现删除数据后重新加载功能
Feb 27 Javascript
详解JavaScript对象的深浅复制
Mar 30 Javascript
Element-ui table中过滤条件变更表格内容的方法
Mar 02 Javascript
vue中使用props传值的方法
May 08 Javascript
浅谈Vue.set实际上是什么
Oct 17 Javascript
vant 中van-list的用法说明
Nov 11 Javascript
解决Antd Table表头加Icon和气泡提示的坑
Nov 17 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
WML,Apache,和 PHP 的介绍
2006/10/09 PHP
PHP 字符串分割和比较
2009/10/06 PHP
eaglephp使用微信api接口开发微信框架
2014/01/09 PHP
浅谈PHP无限极分类原理
2019/03/14 PHP
ExtJs使用IFrame的实现代码
2010/03/24 Javascript
javascript 仿QQ滑动菜单效果代码
2010/09/03 Javascript
jquery中dom操作和事件的实例学习 下拉框应用
2011/12/01 Javascript
Eval and new funciton not the same thing
2012/12/27 Javascript
JS小功能(列表页面隔行变色)简单实现
2013/11/28 Javascript
关于JavaScript命名空间的一些心得
2014/06/07 Javascript
AngularJS中的模块详解
2015/01/29 Javascript
JS+CSS实现类似QQ好友及黑名单效果的树型菜单
2015/09/22 Javascript
微信小程序自定义组件
2017/08/16 Javascript
Node.js实现mysql连接池使用事务自动回收连接的方法示例
2018/02/03 Javascript
JS实现的汉字与Unicode码相互转化功能分析
2018/05/25 Javascript
vue后台管理之动态加载路由的方法
2018/08/13 Javascript
js代码规范之Eslint安装与配置详解
2018/09/08 Javascript
浅谈React Native 传参的几种方式(小结)
2019/05/21 Javascript
Django中ORM表的创建和增删改查方法示例
2017/11/15 Python
Python使用Windows API创建窗口示例【基于win32gui模块】
2018/05/09 Python
Django 登陆验证码和中间件的实现
2018/08/17 Python
对python中数组的del,remove,pop区别详解
2018/11/07 Python
Python中new方法的详解
2019/01/15 Python
Python 读取有公式cell的结果内容实例方法
2020/02/17 Python
解决运行django程序出错问题 'str'object has no attribute'_meta'
2020/07/15 Python
HTML5 input元素类型:email及url介绍
2013/08/13 HTML / CSS
英国演唱会订票网站:Ticket Selection
2018/03/27 全球购物
豪华床上用品、床单和浴室必需品:Peacock Alley
2019/09/04 全球购物
浙江文明网签名寄语
2014/01/18 职场文书
2014年三八妇女节活动方案
2014/02/28 职场文书
三八妇女节超市活动方案
2014/08/18 职场文书
综治维稳工作承诺书
2014/08/30 职场文书
青春飞扬演讲稿
2014/09/11 职场文书
婚礼庆典答谢词
2015/01/20 职场文书
爱国影片观后感
2015/06/18 职场文书
golang语言指针操作
2022/04/14 Golang