Map和WeakMap
一、Map
Map跟Object对象很像,但不同的是,它的key键名的类型不再局限于字符串类型了,它可以是各种类型的值
Map的方法
-
Map的初始化
// let map = new Map(1, 2, 3)// number 1 is not iterable // let map = new Map([1, 2, 3]) // Iterator value 1 is not an entry object // 元素得是数组 [key,value] let map = new Map([[1, 2], ['name', 'zs'], [4, 5], [{ name: 'zs' }, function () { }]]) console.log(map); //Map(4) {1 => 2, 'name' => 'zs', 4 => 5, {…} => ƒ}
-
set(key,value)方法 给实例设置一对键值对,返回map实例。
map.set(4, 6) // 相同的属性名 会替换之前的属性 map.set(true, null) map.set({ age: 18 }, undefined) console.log(map); //Map(6) {1 => 2, 'name' => 'zs', 4 => 6, {…} => ƒ, true => null, …}
-
get(key) 通过属性名获取属性值
console.log(map.get(1)); //2 console.log(map.get(4)); //6 console.log(map.get(true)); //null console.log(map.get({ name: 'zs' })); //undefined 为什么会是undefined呢,看文章末尾解释
-
size属性 获取Map长度
console.log(map.size) //6
-
delete属性 删除指定的键值对 成功true 失败 false
console.log(map.delete(1)); //true console.log(map.delete({ name: 'zs' })); //false 为什么会是false呢,看文章末尾解释 console.log(map); //
-
clear()方法 清除所有成员
map.clear() console.log(map); //Map(0) {size: 0}
-
has()方法 判断Map结构中是否含有指定的值。如果有,返回true;如果没有,返回fasle。
//使用前先把clear方法注释掉,才会跟此代码块结果一致 console.log(map.has(1)) //false 因为在delete中已经删掉 console.log(map.has('name')) //true console.log(map.has({ name: 'zz' })) //false 为什么会是false呢,看文章末尾解释
-
entries()方法 返回一个键值对的遍历器。
console.log(map.entries()) for (let [key, value] of map.entries()) { console.log(key) //遍历键 console.log(value) //遍历值 键和值一一对应 }
-
keys()方法 返回键名的遍历器
for (let key of map.keys()) { console.log(key) // name 4 {name: 'zz'} true {age: 18} }
-
values()方法 返回键值的遍历器
for (let value of map.values()) { console.log(value) // zs 6 f(){} null undefined }
-
forEach 遍历
map.forEach((item, index) => { // console.log(item); console.log(index) // name 4 {name: 'zz'} true {age: 18} })