Map
Map
是一组键值对的结构,具有极快的查找速度。解决的JavaScript只能以字符串为键的问题
Map 结构的操作方法:
(1)set(key, value) (2)get(key) (3)has(key) (4)delete(key) (5)clear()
var map=new Map([["ziqi",98],["juxiang",87],["wuning",45]]);
map.set("adm",23);
var score1=map.get("juxiang");//87
var score1=map.get("adm"); //23
map.has("ziqi"); //true
map.delete("ziqi");
map.has("ziqi"); //false
console.log(map);
map.size属性可以获取map数据的长度
如果对同一个键多次赋值,后面的值将覆盖前面的值。
const map = new Map();
map
.set(1, 'aaa')
.set(1, 'bbb');
map.get(1) // "bbb"
注意:只有对同一个对象的引用,Map 结构才将其视为同一个键。这一点要非常小心。
const map = new Map();
map.set(['a'], 555);
map.get(['a']) // undefined
Map 的键实际上是跟内存地址绑定的,只要内存地址不一样,就视为两个键。上面代码的set
和get
方法,表面是针对同一个键,但实际上这是两个值,内存地址是不一样的,因此get
方法无法读取该键,返回undefined,
所以说
如果 Map 的键是一个简单类型的值(数字、字符串、布尔值),则只要两个值严格相等,Map 将其视为一个键,比如0
和-0
就是一个键,布尔值true
和字符串true
则是两个不同的键。另外,undefined
和null
也是两个不同的键。虽然NaN
不严格相等于自身,但 Map 将其视为同一个键
let map=new Map();
map.set(-0,124);
map.get(+0) //124
map.set(true, 1);
map.set('true', 2);
map.get(true) //1
map.get('true') //2
map.set(undefined, 3);
map.set(null, 4);
map.get(undefined) // 3
map.get(null) //4
map.set(NaN, 123);
map.get(NaN) // 123
map的遍历方法
Map 结构原生提供三个遍历器生成函数和一个遍历方法
keys()
:返回键名的遍历器。values()
:返回键值的遍历器。entries()
:返回所有成员的遍历器。forEach()
:遍历 Map 的所有成员
set
Set
和Map
类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在Set
中,没有重复的key。数组去重简直很方便呐~~~~
要创建一个Set
,需要提供一个Array
作为输入,或者直接创建一个空Set
:
/ 例一
const set = new Set([1, 2, 3, 4, 4]);
[...set]
// [1, 2, 3, 4]
在 Set 内部,两个NaN
是相等。两个对象总是不相等的
let set = new Set();
set.add({});
set.size // 1
set.add({});
set.size // 2
Set 实例的属性和方法
Set 结构的实例有以下属性。
Set.prototype.constructor
:构造函数,默认就是Set
函数。Set.prototype.size
:返回Set
实例的成员总数。
Set 实例的方法分为两大类:操作方法(用于操作数据)和遍历方法(用于遍历成员)。下面先介绍四个操作方法。
add(value)
:添加某个值,返回 Set 结构本身。delete(value)
:删除某个值,返回一个布尔值,表示删除是否成功。has(value)
:返回一个布尔值,表示该值是否为Set
的成员。clear()
:清除所有成员,没有返回值