every()
检测数值元素的每个元素是否都符合条件。
filter()
检测数值元素,并返回符合条件所有元素的数组。
map()
通过指定函数处理数组的每个元素,并返回处理后的数组。
some()
用于检测数组中的元素是否满足指定条件(函数提供)。
reduce() 数组中的每个值(从左到右)开始合并,最终为一个值
reduceRight() 数组中的每个值(从右到左)开始合并,最终为一个值
eval()
计算
JavaScript
字符串,并把它作为脚本代码来执行。
for
循环代码块一定的次数
while
当指定的条件为 true 时循环指定的代码块
do/while
同样当指定的条件为 true 时循环指定的代码块
for in
循环遍历对象的属性
forEach
调用数组中的每个元素。
具体实现:
首先创建一个庞大的数组:
var aArr = [];
for(var i = 0;i < 1000000;i++){
aArr.push(i);
(function(){
//every
var _sum = 0;
console.time('every求和时间');
aArr.every(function(item,index){
_sum += item;
return true;//every每个值都运行
console.log('every求和: '+_sum);
console.timeEnd('every求和时间');
//filter
var _sum = 0;
console.time('filter求和时间');
aArr.filter(function(item,index){
_sum += item;
console.log('filter求和: '+_sum);
console.timeEnd('filter求和时间');
//map
var _sum = 0;
console.time('map求和时间');
aArr.map(function(item,index){
_sum += item;
console.log('map求和: '+_sum);
console.timeEnd('map求和时间');
//some
var _sum = 0;
console.time('some求和时间');
aArr.some(function(item,index){
_sum += item;
console.log('some求和: '+_sum);
console.timeEnd('some求和时间');
//reduce
console.time('reduce求和时间');
var prev;
aArr.reduce(function(prev,item,index){
prev += item;
console.log('reduce求和: '+_sum);
console.timeEnd('reduce求和时间');
//reduceRight
console.time('reduceRight求和时间');
var next;
aArr.reduceRight(function(next,item,index){
prev += item;
console.log('reduceRight求和: '+_sum);
console.timeEnd('reduceRight求和时间');
//eval
console.time('eval求和时间');
var _sum = eval(aArr.join('+'));
console.log('eval求和: '+_sum);
console.timeEnd('eval求和时间');
//for
console.time('for(var i = 0,len = aArr.length;i < len;i++)求和时间');
var _sum = 0;
for(var i = 0,len = aArr.length;i < len;i++){
_sum += i;
console.log('for求和: '+_sum);
console.timeEnd('for(var i = 0,len = aArr.length;i < len;i++)求和时间');
console.time('for(var i = 0;i < aArr.length;i++)求和时间');
var _sum = 0;
for(var i = 0;i < aArr.length;i++){
_sum += i;
console.log('for求和: '+_sum);
console.timeEnd('for(var i = 0;i < aArr.length;i++)求和时间');
//while
console.time('while求和时间');
var _sum = 0,i = 0,_len = aArr.length;
while(i < _len){
_sum += aArr[i];
i++;
console.log('while求和: '+_sum);
console.timeEnd('while求和时间');
//do while
console.time('do while求和时间');
var _sum = 0,i = 0,_len = aArr.length;
_sum += aArr[i];
i++;
}while(i < _len)
console.log('do while求和: '+_sum);
console.timeEnd('do while求和时间');
//forEach
var _sum = 0;
console.time('forEach求和时间');
aArr.forEach(function(item,index){
_sum += item;
return true;//every每个值都运行
console.log('forEach求和: '+_sum);
console.timeEnd('forEach求和时间');
every求和: 4999950000
every求和时间: 5.648193359375ms
filter求和: 4999950000
filter求和时间: 3.9560546875ms
map求和: 4999950000
map求和时间: 17.988037109375ms
some求和: 4999950000
some求和时间: 6.005126953125ms
reduce求和: 4999950000
reduce求和时间: 5.129150390625ms
reduceRight求和: 4999950000
reduceRight求和时间: 4.081787109375ms
eval求和: 4999950000
eval求和时间: 43.47314453125ms
for求和: 4999950000
for(var i = 0,len = aArr.length;i < len;i++)求和时间: 2.748046875ms
for求和: 4999950000
for(var i = 0;i < aArr.length;i++)求和时间: 5.08984375ms
while求和: 4999950000
while求和时间: 4.9140625ms
do while求和: 4999950000
do while求和时间: 4.52392578125ms
forEach求和: 4999950000
forEach求和时间: 4.5830078125ms
效率最快的也就是我们用的较多的for循环(红字),但是如果不注意for的优化写法,就会导致for性能的极大降低