ES5 模拟Set 与 Map 集合

Set 常用于检查对象中是否存在某个键名

Map集合常被用于获取已存的信息

所有对象的属性名必须是字符串,那么必须确保每个键名都是字符串类型且在对象中是唯一的

数值类型和对象类型的键名会自动转换为字符串类型

key1和key2被转换为对象对应的默认字符串"[object Object]"

本意是检查count属性是否存在,value为1,为真,若如果value为0或者不存在,if都不会执行

ES6 中的Set集合

一种有序列表,其中含有一些相互独立的非重复值

(1)创建Set并增加元素

Set 集合不会对所存值进行强制类型转换,

key1  和 key2 不会转换为字符串,所以它们在Set中是独立的元素

初始化Set

会自动过滤掉重复的值

可以用has() 方法检测Set中是否有某个值

移除元素

delete() 方法可以移除Set集合中某一个元素,clear() 方法会移除集合中的所有元素

Set 集合转换为数组

Weak Set 集合(弱引用集合)

将对象存储在Set的实例与存储在变量中完全一样,只要Set实例中的引用存在,垃圾回收机制就不会释放该对象的内存空间

Set的原始对象的引用一直保留,会造成内存泄漏

Weak Set 集合只存储对象的弱引用,并且不可以存储原始值;集合中的弱引用如果是对象唯一的引用,则会被回收被释放内存

WeakSet 构造函数不接受任何原始值,如果数组中包含其他非对象值,程序会抛出错误

与Set集合的主要区别,WeakSet保存的是对象值的弱引用

另外

(1)WeakSet 不支持原始值

(2)Weak Set集合不可以迭代,不支持for-of循环

(3)不暴露任何迭代器, keys() 或values()方法

(4)Weak Set 集合不支持forEach() 方法

(5)不支持size属性

ES6 中的 Map 集合

Map 类型 是一种存储着许多键值对的有序列表,其中的键名和对应的值支持所有的数据类型

键名的等价性是通过Object.is() 实现的,所有5 和 "5" 会被判定为两种数据类型

与对象不一样,对象的属性名总会被强制转换为字符串类型

向Map集合中添加新元素

调用get方法时,如果键名不存在,则返回undefined

Map集合支持的方法

has(key) 检测指定的键名在Map集合中是否存在

delete(key) 从Map集合中移出键值对

clear() 移出Map集合中所有键值对

Map集合的初始化方法

向Map构造函数传入数组来初始化Map集合,每个元素都是一个子数组,包含一个键值对,两个元素

Map集合的forEach() 方法 与Set 和 数组 类似,接收三个参数

(1)Map集合中下一次索引的位置

(2)值对应地键名

(3)Map集合本身

可以指定forEach函数的第二个参数作为回调函数的this值

Weak Map 集合

Weak Map 集合的键名必须是一个对象,如果使用非对象键名会报错,集合中保存着这些对象的弱引用,

如果在弱引用之外不存在其他的强引用,引擎的垃圾回收机制会自动回收这个对象,同时也会移除Weak Map 里面的键值对

但只有集合的键名遵从这个规则,键名对应的值如果是一个对象,则保存的是对象的强引用,不会触发垃圾回收机制

Weak Map 集合最大的用途是保存Web页面中的DOM元素,一些为Web页面打造的JavaScript库,会通过自定义的对象保存每一个引用的DOM元素

一旦从Web页面中移除保存过的DOM元素,如果通过库本身将这些对象从集合中移除,

否则,可能因为库过于庞大而导致内存泄漏,WeakMap可以解决这个问题

Weak Map 集合也不支持size属性,所以无法验证其是否为空,

WeakMap集合的初始化方法

传入的键值必须为非null的对象

不支持键名枚举,所以不支持clear()方法

WeakMap用来存储私有数据

ES6 Set 和 Map的更多相关文章

  1. ES6学习:Map结构的目的和基本用法

    Map结构的目的和基本用法 JavaScript的对象(Object)本质上是键值对的集合(Hash结构),但是只能用字符串作为键.这给它的使用带来了很大的限制.   1 2 3 4 5 6 7 8 ...

  2. ES6 中的 Map和Set

    集合的概念以及和数组的区别 其实数组也是集合, 只不过数组的索引是数值类型.当想用非数值类型作为索引时, 数组就无法满足需要了. 而 Map 集合可以保存多个键-值对(key-value), Set ...

  3. js ES6 Set和Map数据结构详解

    这篇文章主要介绍了ES6学习笔记之Set和Map数据结构,结合实例形式详细分析了ECMAScript中基本数据结构Set和Map的常用属性与方法的功能.用法及相关注意事项,需要的朋友可以参考下   本 ...

  4. es6 Set 和Map 数据结构

    ES6提供了新的数据结构Set,它类似于数组,但是成员的值都是唯一的,没有重复的值. Set 本身是一个数据结构,用来生成Set 数据结构. const s = new Set(); [2,3,5,4 ...

  5. ES6中的Map集合(与java里类似)

    Set类型可以用来处理列表中的值,但是不适用于处理键值对这样的信息结构.ES6也添加了Map集合来解决类似的问题 一.Map集合 JS的对象(Object),本质上是键值对的集合(Hash结构),但是 ...

  6. ES6新增的Map和WeakMap 又是什么玩意?非常详细的解释

    上一篇文章讲了set和weakSet,这节咱就讲Map和weakMap是什么?这两篇文章并没有什么联系,主要知识用法类似而已.嘿嘿,是不是感觉舒服多了. 什么是Map 介绍什么是Map,就不得不说起O ...

  7. ES6之前模拟Map数据结构的写法

    在ES6之前JavaScript 里面本身没有map对象,但是用JavaScript的Array.Object来模拟实现Map的数据结构. 现在已经有Map对象了,这里记录一下之前的写法 Array方 ...

  8. es6入门7--Set Map数据结构

    本文作为ES6入门第十三章的学习整理笔记,可能会包含少部分个人的理解推测,若想阅读更详细的介绍,还请阅读原文ES6入门 一.set数据结构 1.set不接受重复值 ES6新增了Set构造函数用于创建s ...

  9. ES6 Set和Map集合(六)

    一.Set集合创建Set实例:let set = new Set();1.特性:a.Set本身是一个构造函数,用来生成Set数据结构[类比数组结构]b.Set函数可以接受具有Iterable接口的数据 ...

随机推荐

  1. excel 中怎么让两列姓名相同排序(转)

    如图,A列B列不动,C列和D列行值不变,以A列姓名为主让C列姓名和A列相同姓名的对齐(行),D行跟着C行不变. 在E1输入公式=MATCH(C1,A:A,0)然后下拉,接著选中C,D,E列,以E列为标 ...

  2. vue自定义指令directives使用及生命周期

    生命周期 bind:只调用一次,指令第一次绑定到元素时调用,用这个钩子函数可以定义一个绑定时执行一次的初始化动作. inserted:被绑定元素插入父节点时调用(父节点存在即可调用,不必存在于docu ...

  3. java.net.UnknownHostException: master

    1:如果你报这个错误,第一反应应该是本地的host文件没有配置服务器名称和对应的ip地址,这个反应就对了.贴一下错误和解决方法: java.net.UnknownHostException: mast ...

  4. [转] AES,SHA1,DES,RSA,MD5区别

    AES:更快,兼容设备,安全级别高: SHA1:公钥后处理回传 DES:本地数据,安全级别低 RSA:非对称加密,有公钥和私钥 MD5:防篡改 相关: 公开密钥加密(英语:public-key cry ...

  5. 用webstorm搭建vue项目

    本文只针对新手. 首先要明白几个名词(概念). Node.js: Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js 使用了一个事件驱动.非阻塞式 ...

  6. 【译】你应该了解的JavaScript数组方法

    让我们来做一个大胆的声明:for循环通常是无用的,而且还导致代码难以理解.当涉及迭代数组.查找元素.或对其排序或者你想到的任何东西,都可能有一个你可以使用的数组方法. 然而,尽管这些方法很有用,但是其 ...

  7. Python Web开发问题收集(二)

  8. mariadb-半同步复制

    半同步复制: 使用插件 对于从节点,有一部分为同步复制,当主节点复制完从节点后才向客户返回ok,同步超时后自动降级为异步 有一部分为异步复制 这样为了与主节点冗余 基于主从的模式上搭建 半同步复制: ...

  9. Python学习(十九) —— 前端基础之HTML

    转载自:http://www.cnblogs.com/liwenzhou/p/7988087.html 一.HTML介绍 1.Web服务本质 import socket sk = socket.soc ...

  10. P1005 矩阵取数游戏 区间dp 高精度

    题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n \times mn×m的矩阵,矩阵中的每个元素a_{i,j}ai,j​均为非负整数.游戏规则如下: 每次取数时须从每行各取走一个元素,共n ...