es6 map和 weakmap

本文详细介绍了ES6中的Map和WeakMap数据结构。Map允许使用任意类型的键,并提供了丰富的API来操作键值对。WeakMap仅接受对象作为键,并通过弱引用自动管理内存,避免内存泄漏。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

var dataObj = {}; 
dataObj[keyObj] = "大脚好"; 
虽然表面上看dataObj对象的键是对象keyObj,其实不是,dataObj[keyObj]会将keyObj转换转为字符串"[object Object]"。 
//----------Map---------------------------- 

var mapData = new Map(); 
var objKey = {p: "antzone"}; 
mapData.set(objKey, "对象键");    //添加新元素 
console.log(mapData.get(objKey)); //
获取 
console.log(mapData.has(objKey));  //
判断是否含有 
console.log(mapData.delete(objKey)); //
删除键 
mapData.clear();    //
清空 
 

2.数组作为构造函数参数 
var mapData = new Map([["webName", "
资源库"], ["url", "www.yuankuwang.com"]]); 
console.log(mapData.size); 

console.log(mapData.has("webName")); 
console.log(mapData.get("webName")); 
console.log(mapData.has("url")); 
console.log(mapData.get("url")); 
构造函数参数为数组执行的是如下算法(数组的forEach方法) 
forEach
方法将会以插入顺序对Map对象中的每一个键值对执行一次参数中提供的回调函数。 
value:
可选,元素的值。 
key:
可选,元素的键。 
Map:
可选,当前的Map对象。 
thisArg:
可选,callback执行时其this的值。  
mapData.forEach(function (value,key) { 

  console.log(value,key); 
}) 
 
var arr = [["webName", "资源库"], ["url", "www.yuankuwang.com"]]; 
var mapData = new Map(); 

arr.forEach(([key, value]) => mapData.set(key, value)); 
 
3.由于Map对象的键可以是对象,所以只有对同一个对象的引用,Map对象才将其视为同一个键。 
NaN
不严格相等于自身,但Map将其视为同一个键 
let mapData = new Map(); 

mapData.set(NaN, 5); 
console.log(mapData.get(NaN)); 
mapData.set(-0, 5); 
console.log(mapData.get(+0)); 
4.Map遍历 
//---------
转成数组----------- 
var mapData = new Map([["webName", ""], ["url", "www.yuankuwang.com"]]); 

var arr = [...mapData]; 
console.log(arr); 
//---------for--of循环-------- 
var mapData = new Map([["webName", ""], ["url", "www.yuankuwang.com"]]); 

for(let elem of mapData) { 
  console.log(elem); 

//----------其他函数------------- 
var keyIterator = mapData.keys();//
键遍历器
console.log(keyIterator);

var valueIterator = mapData.values();  //值遍历器
console.log(keyIterator.next());   //
遍历器用法
 

console.log(valueIterator); 
var size = mapData.size;      //键值对数量 
console.log(size); 

 
八、WeakMap数据结构 
WeakMap结构与Map结构基本类似。 
区别是它只接受对象作为键名,不接受其他类型的值作为键名。键名是对象的弱引用,当对象被回收后,WeakMap自动移除对应的键值对,WeakMap结构有助于防止内存泄漏。 
var wm = new WeakMap(); 

var obj = new Object(); 
wm.set(obj,'对象1'); 
obj=null; 

wm.get(obj);    //undefined 
wm.has(obj);    //false 
 
由于WeakMap对象不可遍历,所以没有size属性。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值