ECMAScript 6基础(五)
ECMAScript 6也叫ECMAScript 2015,它是2015年发布一个继ES5.1以后的一个版本,不建议直接在浏览器里使用(兼容性低)
在学习ES6的过程中,我们建议使用 nodejs 作为学习环境,NodeJS可以兼容ES6
Set单值集合
Set是一个类数组,其实它是一个不重复的类数组,而且Set只有值没有键
Set的初始化
首先,创建一个Set,可以有参数,参数类型是有迭代能力的类型(如Array,Set,Map,NodeList,arguments,TypedArray,String)
let s=new Set();//空的单值集合
let s=new Set(['a','b','c','d']);//集合存放了5个元素
Set是一个不重复的单值集合,所以当我们向里面添加重复的元素时,它会自动过滤掉
let s1=new Set(['a','b','c','d','c']);
这个时候得到的结果仍然是Set {'a','b','c','d'} ,他将重复的元素直接过滤掉了,可以利用Set不允许重复的元素这一特性来数组去重
let arr=['a','b','c','d','e','a','e','c','b','g'];
let s=new Set(arr);
let arr1=Array.from(s);
let arr2=Array.of(...s);
console.log(arr1);//[ 'a', 'b', 'c', 'd', 'e', 'g' ]
console.log(arr2);//[ 'a', 'b', 'c', 'd', 'e', 'g' ]
Set对象的常用方法
1.add()向集合里面添加元素,重复的元素添加不进去,没有限制数据类型;返回当前添加进去以后的Set对象(可以形成链式语法)
2.delete()向集合里面删除元素,如果删除成功,则返回 true ,如果删除失败,则返回 false
3.has()返回当前Set集合里面有没有这个元素
4.size属性,获取当前Set集合里面的元素个数
Set对象的遍历
首先我们使用for in 遍历,但是发现无法使用for…in遍历Set对象(程序直接跳过)。因为for...in 只能遍历有索引的集合(有序集合),而Set是一个单值集合,他没有键(也就没有索引)。所以我们要使用迭代器(iterable)去遍历,使用for...of 遍历Set对象
let arr=['a','b','c','d','e','a','e','c','b','g'];
let s=new Set(arr);
for(let item of s){
console.log(item);
}
Map键值对集合
Map与Set的数据类型相似,他们都是一个集合,但是map是一个键值对集合,它可以在添加元素的过程中,实现键与值的对象
Map的初始化
let m=new Map();//创建了一个空的map集合
也可以向构造函数Map里面传递参数进行初始化,参数类型是有迭代能力的类型(如Array,Set,Map,NodeList,arguments,TypedArray,String)
let stu={
name:'catchWind',
sex:'男',
age:18
};
var entry=Object.entries(stu);
console.log(entry);//[ [ 'name', 'catchWind' ], [ 'sex', '男' ], [ 'age', 18 ] ]
let m=new Map(entry);
console.log(m);//Map { 'name' => 'catchWind', 'sex' => '男', 'age' => 18 }
Object.entries() 返回一个给定对象自身可枚举属性的键值对数组,通俗点就是Object.entries() 可以把一个对象的键值以数组的形式遍历出来,结果和for...in 一致,但不会遍历原型属性
除了使用上面的方式进行初始化以外,还可以使用下面的方式
let m=new Map([['name','catchWind'],['sex','男'],['age',18]]);
Map对象的常用方法
1.set()方法,向map集合里面添加键值对,但是要注意,键不允许重复,如果重复则添加不进去,会将前面的值替换掉。添加完成以后返回的就是得到的map,所以可以实现链式语法
2.delete()方法,通过一个key向map集合里面删除一个键值对,删除成功返回true,删除失败返回false
3.has()方法,判断map集合里面有没有这个键
4.size属性,判断map里面键值对的长度
Map对象的遍历
map是一个键值对集合,所以有三种需求的遍历
1.遍历所有的key
2.遍历所有的value
3.遍历所有的key与value
let m=new Map();
m.set('name','catchWind').set('sex','男').set('age',18);
//使用key的迭代器,遍历所有的key
let keyIterator=m.keys();//返回一个当前map的key的迭代器 [Map Iterator] { 'name', 'sex', 'age' }
//keyIterator.next() { value: 'name', done: false }
while((abc=keyIterator.next()).done==false){//done为true时即迭代完毕
console.log(abc.value);//name sex age
}
//使用value的迭代器,遍历所有的value
let valueIterator=m.values();
while((abc=valueIterator.next()).done==false){
console.log(abc.value);//catchWind 男 18
}
上面的遍历方式是针对key与value的两种不同方式,但我们仍然可以使用迭代器遍历方法for...of 来进行
/* 第一步
for (let item of m){
console.log(item[0],item[1]);
}
*/
/* 第二步 演变
for(let item of m){
let [key,value]=item;//解构
console.log(key,value);
}
*/
//第三步 演变最后
for(let [key,value] of m){
console.log(key,value);
}