map与weakmap_初探ES6中的Map和WeakMap

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值