every()与some()方法都是JS中数组的迭代方法。every()和some()都会对数组中的每一项运行给定函数,对every()来说,如果该函数对每一项返回true,则返回true;而some()的话,对任一项返回true,则返回true。

看完介绍,你就能联想到逻辑运算符&&和||了,在逻辑运算符中会存在短路操作,那every()和some()是否也支持短路操作呢?下面通过实验来验证下:

var arr = [ 1, 2, 3, 4, 5, 6 ];  

console.log("test every() with &&");
console.log( arr.every( function( item, index, array ){  
  console.log( 'item=' + item + ',index='+index+',array='+array );  
  return item > 3;  
}));

console.log('\ntest some() with ||');
console.log( arr.some( function( item, index, array ){  
  console.log( 'item=' + item + ',index='+index+',array='+array );  
  return item > 3;  
}));

结果如下

test every() with &&
item=1,index=0,array=1,2,3,4,5,6
false

test some() with ||
item=1,index=0,array=1,2,3,4,5,6
item=2,index=1,array=1,2,3,4,5,6
item=3,index=2,array=1,2,3,4,5,6
item=4,index=3,array=1,2,3,4,5,6
true

可以看到:

every()碰到的第一项就返回false,后续不再计算,直接返回false,支持短路操作

some()在第一次遇到返回true的项后,也直接返回true,后续的不再计算,也支持短路操作

转载请注明:知识蚂蚁 » JS数组的every()和some()迭代方法

我来说说

(便于我们更好的交流)

有不明白的地方欢迎留言哦~
取消