ECMAScript5特性介绍之数组篇

72 篇文章 0 订阅
61 篇文章 0 订阅

Es5的特性以及发布很长时间了,增加了很多实用的特性(Array的 indexOf、every,some,forEach等,Object的create,keys,isFrozen等),这些特性已经得到个浏览器的支持,比如:IE9+,FF21+,chrome23+,opera 15+,SF6+都已经基本支持全部特性。详细的特性检测见:http://kangax.github.io/compat-table/es5/

很早时候都想认真理下特性的使用方法,总是被这样或者那样的理由推迟了,现在是时候理一下的时候了,毕竟ES6现在已经是草稿了,并且浏览器都在纷纷向其靠拢,如果再不整理出来,就更加落后了。

言归正转,现在开始Array的新特性:

先看下indexOf,lastIndexOf,every,some,forEach,map,filter,reduce,reduceRight特性

我们先定义一个数组

var arr = [“name”,”age”,”email”,”age”];
console.info(arr.indexOf(“age”));
console.info(arr.lastIndexOf(“age”))
对于上面的代码,很容易理解,完全可以用string的思维去理解

下面看,every,我们先看下every的规范定义
Array.prototype.every(callback[,thisArg]);
根据规范描述,调用会返回一个boolean值,对于数组中的每一个值都会执行这个回调函数,如果某一个元素返回false,every返回立即返回false, 否则,会循环遍历数组中的每一个元素,更详细的规范请参考附件中的15.4.4.16,先看个例子吧
var arr = [2,9,4,5,3,7];
var greater = arr.every(function(e,i){
return e > 5
}); //是否大于5
var smaller = arr.every(function(e,i){
return e < 10
}); //是否小于10
console.info(greater)
console.info(smaller)
上面的代码输出结果分别是false,true。看完规范是不是觉得好理解多了。

下面我们一块看下some的用法,还是先看下规范,

Array.prototype.some(callback[,thisArg]);
some的功能和every的功能比较类似,只不过some是判断某一个元素的值是不是满足某个条件,如果有这个一个元素,则立即返回true,否则会遍历完每个元素,返回false。详细的规范见附件中的15.4.4.17.

直接上个例子。

var arr = [2,9,4,5,3,7];
var greater = arr.some(function(e,i){
return e>10
}); //是否大于5
var smaller = arr.some(function(e,i){
return e<10
}); //是否小于10
console.info(greater)
console.info(smaller)
forEach就是简单的循环遍历了,举个例子而已,不再解释

var arr = [2,9,4,5,3,7];
arr.forEach(function(e){
console.info(e+1)
})
下面介绍下map,规范定义如下:

Array.prototype.map(callback[,thisArg]);
对数组中的每一个元素执行回调函数,把所有的返回值作为一个数组,

var arr = [2,9,4,5,3,7];
var smaller5 = arr.map(function(e,i){
return e<5
});
console.info(smaller5);
返回的结果为:true,false,true,false,true,false

下面看filter,规范定义如下:

Array.prototype.filter(callback[,thisArg]);
对数组中的每一个元素执行回调函数,把所有的返回值作为一个数组,注意,这个返回的数组可能是个空

var arr = [2,9,4,5,3,7];
var smaller5 = arr.filter(function(e,i){
return e<5
}); //是否小于5
console.info(smaller5);

下面看reduce的介绍,规范定义如下:

Array.prototype.filter(callback[,initValue]);
callback中有四个参数,previousValue, currentValue, currentIndex, array,

如果没有设置初始值, previousValue从第一个元素开始, currentValue从第二个元素开始循环。 总共循环Array.prototype.length – 1次。如果设置了初始值,previousValue从初始值开始,currentValue从第一个元素开始循环。 总共循环Array.prototype.length次。 最后返回最后一次callback function调用的结果
var total = [0, 1, 2, 3].reduce(function(a, b){ return a + b; });
数组的新特性基本介绍完了,写的比较仓促,后续会补充。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值