学习笔记根据阮一峰《ES6标准入门(第3版)》整理,笔记中如有问题欢迎指正~
--------------------------------------------------------------------------------------
一、Set——没有重复元素的类数组数据结构
1. 基本用法
(1)创建方式
const s=new Set()
(2)可以接受一个数组为参数,返回Set结构,其成员内的值唯一
const s=new Set([1,5,8,8,9,86]) // s是一个length为5的Set结构
(3)可以利用拓展运算符'...'将Set类型的数据转化为数组
let arr=[...s] //此时的arr返回一个数组
2. Set实例的方法
(1)操作数据方法
s.add(value) //添加某个值,返回Set结构本身
s.delete(value) //删除某个值,返回布尔值,表示是否成功
s.has(value) //判断Set实例中是否存在某个值,返回布尔值
s.clear() //清除所有成员,没有返回值
(2)遍历方法
- s.keys()、s.values()、s.entries()
在Set结构中没有键名,只有键值,因此s.keys()和s.values()方法的行为一致
let set = new Set([1, 2, 3, 8]) for (let item of set.keys()) { console.log(item); }//1
//2
//3
//8
let set = new Set([1, 2, 3, 8]) for (let item of set.values()) { console.log(item); }
//1
//2
//3
//8
由于Set数据结构中的键值和键名相同,所以用s.entries()返回的两个成员相等
let set = new Set([1, 2, 3, 8]) for (let item of set.entries()) { console.log(item); }//[1, 1]
//[2, 2]
//[3, 3]
//[8, 8]
- s.forEach()
接受的第一个参数是处理函数,第二个可选的参数是可选的函数执行上下文中的作用阈对象
处理参数可以接受三个值,item:表示数组的每个元素、index:表示数组的索引、array:表示数组本身。
let set = new Set([1, 2, 3]); set.forEach(function (item) { console.log(item * 2); })
//2
//4
//6
二、Map—— 类似于对象,是键值对的集合,不限制键的形式
1. 与对象的区别
- 对象的键局限于字符串。提供了“字符串——值”的对应,而Map结构提供了“值——值”的对应,是更完善的Hash实现,如果需要“键值对”的数据,用Map比用Object合适。
2. 基本用法
(1)创建方式
const m=new Map() //构造函数
(2)Map构造函数得参数可以接受任何一个具有Iterator接口且每个成员都是一个双元素数组的数据结构。(Set对象和Map对象作为Map构造函数的参数,都可以生成新的Map对象)
const map=new Map()
const o={p:'Hello World'}
map.set(o,'content')
map.get(o) //'content'
map.has(o) //true
map.delete(o) //true
map.has(o) //false
(3)注意事项
-
若对同一个键多次赋值,后面的值将覆盖前面的值
const m=new Map() m.set(1,'value1') .set(1,'value2')
m.get(1) //'value2'
-
只有对同一对象的引用,Map结构才将其视为一个键。
const m=new Map()
m.set(['a'],555) m.get(['a']) //undefined
-
只有当两个值严格相等时,Map结构将其视为两个键。所以即使两个同样的值的实例在Map中被视为两个键。
const m=new Map()
const k1=['a'] const k2=['a']
map.set(k1,111) .set(k2,222)
map.get(k1) //111 map.get(k2) //222
3. 实例属性及方法
(1)实例属性及方法
-
size属性,返回的是Map结构的成员总数
-
set方法,返回的是映射实例,可以设置Map结构的键值对,可以连续操作:set(key,value)
const m=new Map() m.set('key1','value1') .set('key2','value2') -
get方法,返回的是获取的某键的值:
m.get('key1') //'value1' m.get('key2') //'value2' -
has方法,返回布尔值
m.has('key1') //true m.has('key2') //true m.has('key3') //false -
delete方法,返回布尔值,若成功删除,则返回true,否则返回false
m.delete('key1') //true -
clear方法,不返回任何值,直接将Map结构中的数据清除
(2)遍历方法(具有类数组结构,用法与数组类似)
- keys()
- values()
- entries()
- forEach()