ES6 - Map和WeakMap

2019-11-03  本文已影响0人  ElricTang

本文参考:《ECMAScript 6入门》阮一峰

Map

一. Map出现的意义

二. 创建Map

let map = new Map([
    ['key1','value1'],
    ['key2','value2']
]);
console.log(map);
// Map { 'key1' => 'value1', 'key2' => 'value2' }

三. Map的成员

1. 对同一个键多次赋值,后面的值将覆盖前面的值。

let map = new Map([
    ['key1','value1'],
    ['key1','value2']
]);
console.log(map);
// Map { 'key1' => 'value2' }

2. 怎么才是相等的键(同一个键)?

let map1 = new Map([
    [-0,'value1'],
    [+0,'value2']
]);
console.log(map1);// Map { 0 => 'value2' }

let map2 = new Map([
    ['1','value1'],
    ['1','value2']
]);
console.log(map2);// Map { '1' => 'value2' }

let map3 = new Map([
    [true,'value1'],
    [true,'value2']
]);
console.log(map3);// Map { true => 'value2' }
let map4 = new Map([
    [NaN,'value1'],
    [NaN,'value2']
]);

console.log(map4);// Map { NaN => 'value2' }
let key1 = [1,2];
let key2 = [1,2];
let objMap = new Map([
    [key1,'value1'],
    [key2,'value2']
]);
console.log(objMap);
// Map { [ 1, 2 ] => 'value1', [ 1, 2 ] => 'value2' }

四. Map的属性和方法

let map = new Map([
    [0,1],
    [1,2],
    [2,3],
    [3,4]
]);
console.log(map.size);// 4
方法名 描述
set(key, value) 设置成员,返回的是Map本身
get(key) 读取key对应的键值,如果找不到key,返回undefined
has(key) 根据key判断是否存在某个成员,返回一个布尔值
delete(key) 删除成员,返回布尔值
clear() 清空Map
方法名 描述
keys() 返回键名的遍历器
values() 返回键值的遍历器
entries() 返回所有成员的遍历器
forEach() 遍历Map的所有成员
let map = new Map([
    [0,1],
    [1,2],
    [2,3],
    [3,4]
]);
for(let [key,value] of map.entries()){
    console.log(key,value);
}
// 0 1
// 1 2
// 2 3
// 3 4
// 等价于
for(let [key,value] of map){
    console.log(key,value);
}

五. Map转换为数组

let map = new Map([
    [0,1],
    [1,2],
    [2,3],
    [3,4]
]);
console.log(Array.from(map));// [ [ 0, 1 ], [ 1, 2 ], [ 2, 3 ], [ 3, 4 ] ]
let map = new Map([
    [0,1],
    [1,2],
    [2,3],
    [3,4]
]);
console.log([...map]);// [ [ 0, 1 ], [ 1, 2 ], [ 2, 3 ], [ 3, 4 ] ]

WeakMap

一. 与Map的区别

1. 键名只能是对象(但不允许null)
2. 键名是对象的弱引用(不计入垃圾回收机制)。假如对象被回收,WeakMap成员中对应的键也被移除。

3. 因为上面的特点2的原因,导致WeakMap没有遍历操作(keys、values、entries),没有size属性,也不支持clear。

二. WeakMap仅有的方法

方法名 描述
set(key, value) 设置成员,返回的是WeakMap本身
get(key) 读取key对应的键值,如果找不到key,返回undefined
has(key) 根据key判断是否存在某个成员,返回一个布尔值
delete(key) 删除成员,返回布尔值

三. WeakMap的应用(详情见《ECMAScript 6入门》)

上一篇 下一篇

猜你喜欢

热点阅读