ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。

Set 本身是一个构造函数,用来生成 Set 数据结构。

const s = new Set();

[2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x));

for (let i of s) {
console.log(i);
}
// 2 3 5 4
//面代码通过add方法向 Set 结构加入成员,结果表明 Set 结构不会添加重复的值。
//向Set加入值的时候,不会发生类型转换

Set 实例的属性和方法

Set 结构的实例有以下属性。

  • Set.prototype.constructor:构造函数,默认就是Set函数。
  • Set.prototype.size:返回Set实例的成员总数。

Set 实例的方法分为两大类:操作方法(用于操作数据)和遍历方法(用于遍历成员)。下面先介绍四个操作方法。

  • add(value):添加某个值,返回Set结构本身。
  • delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
  • has(value):返回一个布尔值,表示该值是否为Set的成员。
  • clear():清除所有成员,没有返回值。

JavaScript 的对象(Object),本质上是键值对的集合(Hash 结构),但是传统上只能用字符串当作键。这给它的使用带来了很大的限制。

const data = {};
const element = document.getElementById('myDiv'); data[element] = 'metadata';
data['[object HTMLDivElement]'] // "metadata"

  

上面代码原意是将一个 DOM 节点作为对象data的键,但是由于对象只接受字符串作为键名,所以element被自动转为字符串[object HTMLDivElement]

为了解决这个问题,ES6 提供了 Map 数据结构。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object 结构提供了“字符串—值”的对应,Map结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现。如果你需要“键值对”的数据结构,Map 比 Object 更合适。

const m = new Map();
const o = {p: 'Hello World'}; m.set(o, 'content')
m.get(o) // "content" m.has(o) // true
m.delete(o) // true
m.has(o) // false

  

上面代码使用 Map 结构的set方法,将对象o当作m的一个键,然后又使用get方法读取这个键,接着使用delete方法删除了这个键。

上面的例子展示了如何向 Map 添加成员。作为构造函数,Map 也可以接受一个数组作为参数。该数组的成员是一个个表示键值对的数组。

const map = new Map([
['name', '张三'],
['title', 'Author']
]); map.size // 2
map.has('name') // true
map.get('name') // "张三"
map.has('title') // true
map.get('title') // "Author"

  Map 结构的实例有以下属性和操作方法。

(1)size属性

size属性返回 Map 结构的成员总数。

(2)set(key, value)

set方法设置键名key对应的键值为value,然后返回整个 Map 结构。如果key已经有值,则键值会被更新,否则就新生成该键。

(3)get(key)

get方法读取key对应的键值,如果找不到key,返回undefined

(4)has(key)

has方法返回一个布尔值,表示某个键是否在当前 Map 对象之中。

(5)delete(key)

delete方法删除某个键,返回true。如果删除失败,返回false

(6)clear()

clear方法清除所有成员,没有返回值。

最新文章

  1. Entity Framework Code First添加修改及删除单独实体
  2. Thinkphp 验证码
  3. bigdecimal 保留小数位
  4. ViewState提交后丢失,竟然是OnInit搞的鬼
  5. Activemq消息持久化
  6. 安装及破解IntelliJ IDEA15
  7. CC2540开发板学习笔记(八)—— 看门狗
  8. centos 主从复制
  9. Servlet Filter 2
  10. 巧用Freemarker的自定义方法
  11. android开发类似coverflow效果的3d旋转
  12. PHP开发搜索引擎技术全解析
  13. Jquery Datatables(三)
  14. 5月,专用程序猿的经典大作——APUE
  15. Ueditor文件上传问题
  16. Linux-配置vim开发环境
  17. Mysql注入小tips --持续更新中
  18. mysql 用行号rownum更新顺序号字段
  19. 抛开visual studio,纯手工创建asp.net mvc遇到的问题
  20. MVC异步AJAX的三种方法(JQuery的Get方法、JQuery的Post方法和微软自带的异步方法)

热门文章

  1. HTML常用标签-手打抄录-来自-烟雨飘零-拜谢
  2. ACM选修hust 1075 组合+数学+期望值
  3. session_write_close()的作用
  4. password passphrase passcode 的区别
  5. 一个python爬虫工具类
  6. Mysql存储之原生语句操作(pymysql)
  7. caffe Python API 之SoftmaxWithLoss
  8. 利用json模块解析dict报错找不到attribute 'dumps'[python2.7]
  9. 7.Python3标准库--文件系统
  10. IP负载均衡技术