ECMAScript5特性介绍之数组篇

    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 �C 1次。如果设置了初始值,previousValue从初始值开始,currentValue从第一个元素开始循环。 总共循环Array.prototype.length次。 最后返回最后一次callback function调用的结果
var total = [0, 1, 2, 3].reduce(function(a, b){ return a + b; });

数组的新特性基本介绍完了,写的比较仓促,后续会补充。

你可能感兴趣的:(数组,特性,ECMAScript)