ES6学习小结6:何为Map?

什么是map?类似于对象的数据结构,成员键可以是任何类型的值。

具体化:我们知道原先对象内属性名只能是字符串,而Map属性名可以是字符串,也可以是对象或数组。它是一个更完善的hash结构。

属性:

方法:

补充说明:

1、遍历顺序:插入顺序

2、对同一个键多次赋值,后面的值将覆盖前面的值

3、对同一个对象的引用,被视为一个键

4、对同样值的两个实例,被视为两个键

5、键跟内存地址绑定,只要内存地址不一样就视为两个键

6、添加多个以NaN作为键时,只会存在一个以NaN作为键的值

7、Object结构提供字符串—值的对应,Map结构提供值—值的对应

================================================

WeakMap

什么是WeakMap ? 和Map结构类似,成员键只能是对象。

属性:constructor:构造函数,返回WeakMap

方法:

应用场景:

1、储存DOM节点:DOM节点被移除时自动释放此成员键,不用担心这些节点从文档移除时会引发内存泄漏

2、部署私有属性:内部属性是实例的弱引用,删除实例时它们也随之消失,不会造成内存泄漏

补充说明:

1、成员键都是弱引用,垃圾回收机制不考虑WeakMap结构对此成员键的引用

2、成员键不适合引用,它会随时消失,因此ES6规定WeakMap结构不可遍历

3、其他对象不再引用成员键时,垃圾回收机制会自动回收此成员所占用的内存,不考虑此成员是否还存在于WeakMap结构

4、一旦不再需要,成员会自动消失,不用手动删除引用

5、弱引用的只是键而不是值,值依然是正常引用

6、即使在外部消除了成员键的引用,内部的成员值依然存在

原文地址:https://www.cnblogs.com/hxw1024/p/12128423.html

时间: 2024-11-06 07:32:52

ES6学习小结6:何为Map?的相关文章

ES6学习小结7:何为Proxy?

何为Proxy?修改某些操作的默认行为. 具体化:可以理解成在目标对象之前设置一层拦截,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写. 还是不明白?那就举个具体的场景:我们想要购买海外的商品,那可能需要找代购,代购到国外买到商品后,回国后再转交给你.在这个场景中,代购起到了中介代理购买的作用,也就是proxy构造函数起到的作用. 参数形式: 方法: 应用场景:(表单验证) https://segmentfault.com/a/11900000191

概率论学习小结(road map)

在最近学习模式识别和机器学习时经常会用到概率论的知识,索性重新复习一遍概率论的知识.学习概率论最重要的一点不是公式的记忆,而是对公式背后的含义的理解.(其实学习任何一门知识都是如此,但是相比高数等的抽象性来说,概率可能显得更"接地气") 曾经在大学时代数学中学的最差的一门课便是概率论,然而最近的学习中,在几经挣扎之后却渐渐找到了这门课的乐趣,在本科时候学习的那个小小的课本将概率论的趣味完全遮盖住了. 学习概率论首先要明白这门课的意义.概率论顾名思义是研究事件发生的可能性的学科,这里不使

ES6学习之Set 和 Map 数据结构

Set对象 ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set 实例的属性和方法 Set.prototype.constructor:构造函数,默认就是Set函数. Set.prototype.size:返回Set实例的成员总数 Set.prototype.add(value):添加某个值,返回 Set 结构本身. Set.prototype.delete(value):删除某个值,返回一个布尔值,表示删除是否成功. Set.prototype.ha

ES6 学习小结1

ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015. 也就是说,ES6就是ES2015. 虽然目前并不是所有浏览器都能兼容ES6全部特性,但越来越多的程序员在实际项目当中已经开始使用ES6了.所以就算你现在不打算使用ES6,但为了看懂别人的你也该懂点ES6的语法了... 在我们正式讲解ES6语法之前,我们得先了解下Babel. Babel是一个广泛使用的ES6转码器,可以将ES6代码转

ES6学习目录

前面的话 ES6是JavaScript语言的下一代标准,已经在 2015 年 6 月正式发布.它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言 为什么要学习ES6呢?很多流行的JavaScript开源框架都使用ES6编写,如Vue.js.video.js.d3.js等等.不学习ES6,这些流行的框架将不容易上手:ES6可以大大提高开发效率,同时让语法更加规范化,一定程度上增强了代码安全:更重要的是,ES6是语言级别的升级,而并不是一个库或框架.既然迟

缓存学习小结(一)

(Java)缓存的分为文件缓存或磁盘缓存(disc cache)和内存缓存(memory cache)两种:文件缓存就是把数据存储在本地磁盘上,内存缓存通常是一个map.缓存的作用就是把首次从网络的获取数据保存起来,当再次访问的时候可以直接从缓存中获取数据而不是从网络中重新加载.可以减少系统开销,提高响应速度. 单独使用内存缓存和单独使用文件缓存应用的执行流程如下所示: 内存缓存和文件缓存同时使用的情况下的流程图大致如下所示: 需要注意的是,当从网络加载数据的时候用一个线程或者提供一个线程池来完

HTML5学习小结

HTML5是用于取代1999年所制定的 HTML4.01和XHTML1.0标准的HTML标准版本.HTML5的第一份正式草案已于2008年1月公布:2012年12月,规范已经正式定稿.W3C计划在2014年底发布HTML5推荐标准,在2016年底发布HTML5.1推荐标准.HTML5有两大特点:强化了Web网页的表现性能:追加了本地数据库等功能. HTML5向前兼容,只去除很少的部分,比如<frame><font>等.HTML5面向移动,支持IP,GPS,WIFI MAC,GSM/

es6学习笔记初步总结

es6学习笔记初步总结 1. let.const 和 block 作用域 在ES6以前,var关键字声明变量.无论声明在何处,都会被视为声明在函数的最顶部(不在函数内即在全局作用域的最顶部).这就是函数变量提升例如: let 关键词声明的变量不具备变量提升(hoisting)特性 let 和 const 声明只在最靠近的一个块中(花括号内)有效 当使用常量 const 声明时,请使用大写变量,如:CAPITAL_CASING const 在声明时必须被赋值 否则报语法错误SyntaxError

ES6学习及总结(二):对象的解构

ES6学习及总结(二):对象的解构 一:数组的解构 1:ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring).本质上,这种写法属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值. let [foo, [[bar], baz]] = [1, [[2], 3]]; foo // 1 bar // 2 baz // 3 let [ , , third] = ["foo", "bar", "