ECMAScript是一种语言标准,而JavaScript是网景公司对ECMAScript标准的一种实现。
最新版ECMAScript 6标准(简称ES6)已经在2015年6月正式发布了,其中引入了Map、Set、Iterable这写新成员,下面通过文字来介绍介绍这些新家伙。
1.Map
map是ES6引入的新的数据类型,是一组键值对集合,具有极快的查找速度。
eg:根据同学的姓名,查找他对应的成绩;
----
在此之前,需要用两个array来实现这样的需求:
var names=["Tom","Jack","Ken"];
var scores=["100","80","90"];
function getScore(name){
for(var i=0;i<names.length;i++){
if (names[i] === name) {
return scores[i];
}
if (i === names.length) {
return "cann't find the name:"+name;
}
}
}
----
引入Map之后,我们可以这样可
var scores=new Map();
scores.set("Tom",100);
scores.set("Jack",80);
scores.set("Ken",90);
通过scores.get();就可以获取
另外在生命Map时,也可以这样声明:
var map=new Map(["Tom",100],["Jack",80],["Ken",90]);
map中智能存储一个相同的key,再次放入相同的key,会覆盖之前的value
2.Set
同Map类似,只是他里面存储的是单列元素,没有key,而且元素不能重复。
eg:
var sets=new Set();
sets.add(1);
sets.add(2);
也可以这样声明,
var sets=new Set([1,2]);
常用的函数:
add();添加元素,
delete();删除元素
3.iterable
ES6标准引入了新的iterable
类型,Array
、Map
和Set
都属于iterable
类型。用来遍历集合。
iterable类型的集合可以通过for...of...来遍历,for...of...也是ES6中的新语法
eg1:
var array=[1,2,3];
for(var value of array){
console.log(value);
}
eg2:
var sets=new Set([1,2,3]);
for(var value of sets){
console.log(value);
}
var maps=new Map([1,"Tom"],[2,"Jck"],[3,"Ken"]);
for (var kv of maps) {
console.log("key:"+kv[0]+",value:"+kv[1]);
}
那么问题来了:
for of 和 for in 有啥区别呢
for in用来遍历对象的属性,一个Array
数组实际上也是一个对象,它的每个元素的索引被视为一个属性,
当我们给array数组添加一个属性时,会有意外
eg:
var arr=["A","B","C"];
arr.name="Tom";
for(var i in arr){
console.log(i);//1,2,3,"name"
}
for in 循环中会把name属性包含进去,arr还有length属性,却没有包含进去,而如果使用for of只遍历集合的元素,即value
for(var i of arr){
console.log(i);//"A","B","C"
}
总结:for in 遍历的索引,for of遍历集合中的元素
其实更好的遍历方法是使用iterable内置的foreach方法
eg:
var a = ['A', 'B', 'C'];
a.foreach(function(element,index,array){
//eletment 当前元素的值
//key当前元素的索引
//array当前数组
console.log(index+","+element+","+array);
});
Set与Array
类似,但Set
没有索引,因此回调函数的前两个参数都是元素本身:
eg:
var s = new Set(['A', 'B', 'C']);
s.forEach(function (element, sameElement, set) {
console.log(element);
});
Map的回调函数参数依次为value
、key
和map
本身:
eg:
var m = new Map([[1, 'A'], [2, 'B'], [3, 'C']]);
m.forEach(function (value, key, map) {
console.log(value);
});
如果你只对element感兴趣,那么也可以这样:
eg:
var m = new Map([[1, 'A'], [2, 'B'], [3, 'C']]);
m.forEach(funtion(element){
console.log(element);
});
不被看好,那又怎样,不积硅步无以至千里。on the way。