es6map,set和weakmap,weakset

starof starof     2022-09-05     706

关键词:

这些是新加的集合类型,提供了更加方便的获取属性值的方法,不用像以前一样用hasOwnProperty来检查某个属性是属于原型链上的呢还是当前对象的。同时,在进行属性值添加与获取时有专门的get,set 方法。

// Sets
var s = new Set();
s.add("hello").add("goodbye").add("hello");
s.size === 2;
s.has("hello") === true;

// Maps
var m = new Map();
m.set("hello", 42);
m.set(s, 34);
m.get(s) == 34;

// Weak Maps
var wm = new WeakMap();
wm.set(s, { extra: 42 });
wm.size === undefined

// Weak Sets
var ws = new WeakSet();
ws.add({ data: 42 });
// Because the added object has no other references, it will not be held in the set

 

一、Map

Map解决的是Object的键值对中键只能是字符串的问题。

Map是Es6提供的新的数据结构,是键值对的集合。Map的“键”不限于字符串。各种类型的值(包括对象)都可以当做键。

New  Map

初始化Map,可以以数组的格式来传入键值对。

let myMap = new Map([
        ["key1", "value1"],
        ["key2", "value2"]
    ]); 

Map的遍历

let map=new Map([['F','no'],['T','yes']]);
for(let key of map.keys()){
    console.log(key);
} 
//F
//T
map.keys();
//MapIterator {"F", "T"}
map.values()
//MapIterator {"no", "true"}
for(let value of map.values()){
    console.log(value);
}
//no
//yes
for(let [key,value] of map.entries()){
    console.log(key,value);
}
//F no
//T yes

Map转数组

var m=new Map([
    [1,"one"],
    [2,"two"],
    [3,"three"]
])

m.keys()
//MapIterator {1, 2, 3}
[...m.keys()]
//[1, 2, 3]
m.values()
//MapIterator {"one", "two", "three"}
[...m.values()]
//["one", "two", "three"]
m.entries()
//MapIterator {[1, "one"], [2, "two"], [3, "three"]}
[...m.entries()]
//[Array[2], Array[2], Array[2]]
[...m]
//[Array[2], Array[2], Array[2]]

二、WeakMap

 WeakMap结构与Map结构基本类似,唯一的区别就是WeakMap只接受对象作为键名(null除外),而且键名所指向的对象不计入垃圾回收机制。

WeakMap专用场景:

它的键所对应的对象可能会在将来消失。

典型应用:

一个对应DOM元素的WeakMap结构,当某个DOM元素被清除,其所对应的WeakMap记录就会自动被移除。

 

有时候我们会把对象作为一个对象的键用来存放属性值,普通集合类型比如简单对象会阻止垃圾回收器对这些作为属性键存在的对象的回收,有造成内存泄漏的危险。而WeakMap,WeakSet则更加安全些,这些作为属性键的对象如果没有别的变量在引用它们,则会被回收释放掉。

 

 

参考:

http://www.cnblogs.com/chris-oil/p/5715248.html

es6features

 

本文作者starof,因知识本身在变化,作者也在不断学习成长,文章内容也不定时更新,为避免误导读者,方便追根溯源,请诸位转载注明出处:http://www.cnblogs.com/starof/p/6955802.html有问题欢迎与我讨论,共同进步。

javascript中的weakmap和weakset(代码片段)

WeakMap的key不能是基本类型letweakMap=newWeakMap();letobj=;weakMap.set(obj,"ok");//worksfine(objectkey)//can'tuseastringasthekeyweakMap.set("test","Whoops");//Error,because"test"isnotanobject如果key指向了null,则key会被自动回收letj... 查看详情

es6:数据结构set和map&weakset和weakmap(代码片段)

ES6:数据结构Set和Map&WeakSet和WeakMapSet基本使用常见方法WeakSetWeakSet的特点基本使用WeakMap的应用Map基本使用常见方法WeakMapWeakMap的特点强引用和弱引用在ES6以前存储数据的结构有两种:数组和对象。在ES6中新增两种数据结构:Set... 查看详情

es6:数据结构set和map&weakset和weakmap(代码片段)

ES6:数据结构Set和Map&WeakSet和WeakMapSet基本使用常见方法WeakSetWeakSet的特点基本使用WeakMap的应用Map基本使用常见方法WeakMapWeakMap的特点强引用和弱引用在ES6以前存储数据的结构有两种:数组和对象。在ES6中新增两种数据... 查看详情

es6中的setmap和weakmap

ES6新增了几种集合类型,本文介绍 Set、Map 和 WeakMap。比较新的Firefox、Chrome(需要在about:flags启用实验性JavaScript)以及IE11都有不同程度的实现。需要注意的是,ES6规范会一直调整,本文只以当前规范及浏览器实现为准... 查看详情

es6map&set(代码片段)

<scripttype="text/javascript">//map基本使用letmap=newMap();map.set(‘name‘,‘张三‘);map.set(‘age‘,11);map.set(‘已婚‘,false);console.log(map.get(‘name‘));console.log(map.get(‘age‘));console.log(map.get(‘已婚 查看详情

es6map数据类型,要比set还很多

首先它支持多数据存储,具有增删查功能set()设置get()获取;has()查找;delete(‘obj‘)删除指定;clear()全部删除size长度letjson={name:"websong",skili:"web"};//设置-增加varmsp=newMap();msp.set(json,‘iam‘);console.info(msp)msp.set(‘niubi‘,‘111‘)conso 查看详情

es6weakmap和weakset的使用场景

...决这个问题,ES6还引入了另外两种新的数据结构,即称为WeakMap和WeakSet的弱集合。这些集合之所以是“弱的”,是因为它们允许从内存中清除不再需要的被这些集合所引用的对象。 查看详情

es6map结构

Map结构的实例有以下属性和操作方法。(1)size属性size属性返回Map结构的成员总数。(2)set(key,value)set方法设置key所对应的键值,然后返回整个Map结构。如果key已经有值,则键值会被更新,否则就新生成该键。(3)get(key)get方法... 查看详情

es6set,weakset,map,weakmap

1.SetSet是一个集合,里面的值都是唯一的,没有重复的。Set中可以是任何数据类型,并且添加数据时会进行严格比较,重复数据无法加入。2.WeakSet弱引用Set。只能存储对象,不能存储其他类型。且只保持对其中对象的弱引用,若... 查看详情

es6map与set(代码片段)

ES6Map与Set1、map<scripttype="text/javascript">//ES6提供了Map数据结构。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。constm=newMap();//创建Mapconsto=p:‘HelloWorld‘;m.... 查看详情

es6map对象以及set对象(代码片段)

首先介绍一下Set对象Set对象是值的集合,你可以按照插入的顺序迭代它的元素。Set中的元素只会出现一次,即Set中的元素是唯一的。语法如下constset1=newSet([1,2,3,4,5]);console.log(set1.has(1));//expectedoutput:trueconsole.log(set1.has(5));//expectedout... 查看详情

map和weakmap数据结构

Map和WeakMap是ES6新增的数据结构一、Map它们本质与对象一样,都是键值对的集合,但是他们与Object对象主要的不同是,键可以是各种类型的数值,而Object对象的键只能是字符串类型或者Symbol类型值,Map和WeakMap是更为完善的Hash结构... 查看详情

浅析map和weakmap区别以及使用场景(代码片段)

在阅读红宝书时遇到了WeakMap这个关键字,第一次见感觉没啥用,是我见识浅了,其实还是有点用的,有多大我不知道(快跑)希望这一篇文章能让你对Map有更好的理解,或者能够帮你理解Map和WeakMap这... 查看详情

浅析map和weakmap区别以及使用场景(代码片段)

在阅读红宝书时遇到了WeakMap这个关键字,第一次见感觉没啥用,是我见识浅了,其实还是有点用的,有多大我不知道(快跑)希望这一篇文章能让你对Map有更好的理解,或者能够帮你理解Map和WeakMap这... 查看详情

es6map对象(代码片段)

Map对象letarr=[["a",1],["b",2],["c",3]];//需要使用二维数组形式letm=newMap(arr);console.log(m);Map属性和方法letarr=[["a",1],["b",2],["c",3]];letm=newMap(arr);//m.clear();//清空所有值->返回值:未定义console.log(m);m.delete("a");//删除某一项->返回值:布尔值con... 查看详情

es6通过weakmap解决内存泄漏问题(代码片段)

一、Map1.定义Map对象保存键值对,类似于数据结构字典;与传统上的对象只能用字符串当键不同,Map对象可以使用任意值当键。2.语法newMap([iterable])属性size:返回键值对的数量。操作方法set(key,value):设置(新增/更新)键key的值... 查看详情

TypeScript 找不到名称 Weakmap、Map 等

】TypeScript找不到名称Weakmap、Map等【英文标题】:TypeScriptcannotFindnameWeakmap,Map,etc【发布时间】:2018-12-1013:54:22【问题描述】:我想到了Angular教程,并有这个ts和webpack配置这里是tsconfig"compilerOptions":"target":"es5","module":"es2015","moduleRes... 查看详情

《javascript高级程序设计》学习笔记|6.5.weakmap

关注前端小讴,阅读更多原创技术文章WeakMapWeakMap是ECMAScript6的新增特性,是一种新的集合类型,是Map的“兄弟”类型,也是Map的子集“weak”描述的是JS垃圾回收程序对待“弱映射”中键的方式相关代码→基本API使用new关键字和We... 查看详情