资讯专栏INFORMATION COLUMN

初探ES6中的Map和WeakMap

liukai90 / 1211人阅读

摘要:对象保存键值对。清空用于移除对象中指定的元素。执行删除操作返回一个值,用来表明中是否存在指定元素一样的后面的会覆盖前面的值把对象转换为迭代器返回一个新的对象对象是一组键值对的集合,其中的键是弱引用的。其键必须是对象,而值可以是任意的。

Map 对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。
使用映射对象
let myMap=new Map();
let keyObj={},keyfunc=function(){},keysTring="hello word";
set(key,value) 添加值
myMap.set(keysTring,"keysTring的关联值")
myMap.set(keyfunc,"keyfunc的关联值")
myMap.set(keyObj,"keyObj的关联值")
size 获取Map的大小
console.log(myMap.size)  //3
get(key) 获取map的值
console.log(myMap.get(keysTring)) //keysTring的关联值
console.log(myMap.get("hello word")) //keysTring的关联值


----------


console.log(myMap.get(keyfunc)) //keyfunc的关联值
console.log(function(){}===keyfunc)  //false 
console.log(myMap.get(function(){})) //undefined, 因为keyFunc !== function () {}


----------


console.log(myMap.get(keyObj)) //keyObj的关联值
console.log({}===keyObj)  //false 
console.log(myMap.get({})) //undefined 因为keyObj !== {}
将NaN作为映射的键
myMap.set(NaN, "not a number");
console.log(myMap.get(NaN))  //not a number

var otherNaN=Number("foo");
console.log(otherNaN)  //NaN
console.log(myMap.get(otherNaN))  //not a number 也可以取值
映射与数组对象的关系
let kvArray = [["key1", "value1"], ["key2", "value2"]];
var myMap1 = new Map(kvArray);
//使用映射对象常规的构造函数将一个二维键值对数组对象转换成一个映射关系
console.log(myMap1) //Map { "key1" => "value1", "key2" => "value2" }
console.log(myMap1.get("key1"))  //value1
console.log([...myMap1]) //[ [ "key1", "value1" ], [ "key2", "value2" ] ]
forEach()
var myMap2 = new Map(kvArray);
myMap2.forEach((value,index)=>{
    console.log(value+"---"+index)  //value1---key1   value2---key2
})
for..of
var myMap3 = new Map(kvArray);
for(var a of myMap3){
    console.log(a)      //[ "key1", "value1" ] [ "key2", "value2" ]
}

for(var [key,value] of myMap3){
    console.log("key:"+key+", value:"+value)  //key:key1, value:value1 key:key2, value:value2
}
clear()方法会移除Map对象中的所有元素。
let clearMap=new Map();
clearMap.set("hello","word");
console.log(clearMap.size)  //1
clearMap.clear();   //清空
console.log(clearMap.size)  //0
delete(key)用于移除 Map 对象中指定的元素。
let delMap=new Map();
delMap.set("hi","word");
delMap.set("hello","word");
console.log(delMap)  //Map { "hi" => "word", "hello" => "word" }
delMap.delete("hi"); //执行删除操作
console.log(delMap)  //Map { "hello" => "word" }
has(key) 返回一个bool值,用来表明map 中是否存在指定元素.
let hasMap=new Map();
hasMap.set("hi","word");
hasMap.set("hi","hello word");
console.log(hasMap)  //Map { "hi" => "hello word" }   一样的key后面的value会覆盖前面的值
console.log(hasMap.has("hi")); //true
console.log(hasMap.has("hello")); //false
entries()把map对象转换为迭代器
let entriesMap=new Map();
entriesMap.set("a","A");
entriesMap.set("b","B");
let entries=entriesMap.entries();
console.log(entries.next()); //{ value: [ "a", "A" ], done: false }
console.log(entries.next().value); //[ "b", "B" ]
console.log(entries.next()); //{ value: undefined, done: true }
values() 返回一个新的Iterator对象
let valueMap=new Map();
valueMap.set("a","A");
valueMap.set("b","B");
let values=valueMap.values();
console.log(values.next())  //{ value: "A", done: false }
console.log(values.next())  //{ value: "B", done: false }
console.log(values.next())  //{ value: undefined, done: true }
WeakMap 对象是一组键/值对的集合,其中的键是弱引用的。其键必须是对象,而值可以是任意的。
WeakMap只提供了4个方法:
1.delete(key); 根据key删除value
2.get(key);根据key获取value
3.has(key) 根据key检查是不是存在value
4.set(key,value) 根据key设置value

let weakMap=new WeakMap();
weakMap.set("hi","word")  //异常   因为WeakMap的键只能是个对象
let obj1={};
weakMap.set(obj1,"word")  //正常
console.log(weakMap)   //WeakMap {}
console.log(weakMap.get(obj1))  //word
console.log(weakMap.has(obj1))  //true
console.log(weakMap.delete(obj1))  //true 

每天进步一点,希望大家喜欢,也希望喜欢的朋友点个赞,后续继续更新...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/93859.html

相关文章

  • es6 MapWeakMap

    摘要:事实上,不仅仅是数组,任何具有接口且每个成员都是一个双元素的数组的数据结构都可以当做构造函数的参数。返回所有成员的遍历器需要特别注意的是,的遍历顺序就是插入顺序。转为转为,正常情况下,所有键名都是字符串。 Map JavaScript 的对象(Object),本质上是键值对的集合(Hash 结构),但是传统上只能用字符串当作键。这给它的使用带来了很大的限制。为了解决这个问题,ES6 提...

    sPeng 评论0 收藏0
  • 细说es6中的SetMap

    摘要:返回一个布尔值,表示该值是否为的成员。返回键名的遍历器返回键值的遍历器返回键值对的遍历器使用回调函数遍历每个成员需要特别指出的是,的遍历顺序就是插入顺序。该数组的所有成员,都会自动成为实例对象的成员。这意味着,数组的成员只能是对象。 1.Set ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。Set 本身是一个构造函数,用来生成 Set 数据结构...

    Ryan_Li 评论0 收藏0
  • 深入理解:ES6中的SetMap数据结构,Map与其它数据结构的互相转换

    摘要:学习笔记工作中常用到的语法只是简单提及和,今天有空于是写了这篇文章深入理解中的和数据结构,与其它数据结构的互相转换。的提供了新的数据结构。本身是一个构造函数,用来生成数据结构。 文中的内容主要是来自于阮一峰的《ES6标准入门》(第三版)。《学习ES6笔记──工作中常用到的ES6语法》只是简单提及Set和Map,今天有空于是写了这篇文章──《深入理解:ES6中的Set和Map数据结构,M...

    Cristalven 评论0 收藏0
  • ES6 系列之 WeakMap

    摘要:一个对象若只被弱引用所引用,则被认为是不可访问或弱可访问的,并因此可能在任何时刻被回收。也就是说,一旦不再需要,里面的键名对象和所对应的键值对会自动消失,不用手动删除引用。如果有错误或者不严谨的地方,请务必给予指正,十分感谢。 前言 我们先从 WeakMap 的特性说起,然后聊聊 WeakMap 的一些应用场景。 特性 1. WeakMap 只接受对象作为键名 const map = ...

    CollinPeng 评论0 收藏0
  • es6 Mapset

    摘要:返回一个布尔值,表示该值是否为的成员。清除所有成员,没有返回值。该数组中的每一项也必须是数组,内部数组的首个项会作为键,第二项则为对应值。返回所有成员的遍历器需要特别注意的是,的遍历顺序就是插入顺序。 Js大部分历史时期都只存在一种集合类型,也就是数组类型。数组在 JS 中的使用正如其他语言的数组一样,但缺少更多类型的集合导致数组也经常被当作队列与栈来使用。数组只使用了数值型的索引,而...

    superPershing 评论0 收藏0

发表评论

0条评论

liukai90

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<